Koble til JUnit-rammeverket

For å teste Java-kode har vi et flott rammeverk kalt JUnit . Den fungerer utmerket, den oppdateres konstant, den er veldig populær og selvfølgelig er Intellij IDEA veldig tett integrert med den.

Nå bruker alle den femte versjonen av dette rammeverket - JUnit 5 , selv om du fortsatt kan finne den fjerde versjonen i mange prosjekter. De er ikke mye forskjellige, men vi skal uansett ta en titt på den nyeste. Jeg tror at når du begynner aktivt å skrive tester, vil du godkjenne valget mitt.

Så, hvordan legge til JUnit til prosjektet? Etter å ha lært Maven vil det være enkelt: bare legg til denne koden til pom.xml:

<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-engine</artifactId>
	<version>5.8.1</version>
	<scope>test</scope>
</dependency>

Forresten, hvis du vil at Maven skal kjøre testene dine på byggestadiet ( teststadiet ), må du legge til ett fragment til i pom.xml:

<plugin>
    <artifactId>maven-surefire-plugin</artifactId>
	<version>2.19.1</version>
	<dependencies>
    	<dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-surefire-provider</artifactId>
            <version>1.3.2</version>
    	</dependency>
	</dependencies>
</plugin>

@Testkommentar

La oss si at du har en klasse du vil teste. Hva er den beste måten å gjøre dette på? La oss starte med et eksempel, for det er vanskelig å teste en abstrakt klasse :)

Anta at vi har en kalkulatorklasse som kan utføre 4 grunnleggende operasjoner: addisjon, subtraksjon, multiplikasjon og divisjon. La oss skrive det:

class Calculator {
    	public int add(int a, int b) {
        	return a+b;
    	}

    	public int sub(int a, int b) {
        	return a-b;
    	}

    	public int mul (int a, int b) {
        	return a*b;
    	}

    	public int div(int a, int b) {
        	return a/b;
    	}
}

Vi ønsker å teste metodene i denne klassen. Du vet aldri, i fremtiden endrer de noe og alt vil slutte å fungere. Hvordan kan vi skrive tester for det?

Vi må lage en annen klasse. For å gjøre dette tar de vanligvis samme navn og legger til Test-suffikset . For hver metode må du legge til minst én testmetode. Eksempel:

class CalculatorTest {
   	@Test
    	public void add() {
    	}
   	@Test
    	public void sub() {
        }
   	@Test
    	public void mul() {
    	}
   	@Test
    	public void div() {
    	}
}

Tidligere var det et krav om at metodenavnet skulle begynne med ordet test , men dette er ikke lenger nødvendig.

JUnit test eksempler

La oss skrive noen eksempler der vi vil teste metodene til vår CalculatorTest- klasse :

class CalculatorTest {
   	@Test
    	public void add() {
        	Calculator calc = new Calculator();
        	int result = calc.add(2, 3);
        	assertEquals(5, result);
    	}

   	@Test
    	public void sub() {
        	Calculator calc = new Calculator();
        	int result = calc.sub(10, 10);
        	assertEquals(0, result);
        }

   	@Test
    	public void mul() {
        	Calculator calc = new Calculator();
        	int result = calc.mul(-5, -3);
        	assertEquals(15, result);
    	}

   	@Test
    	public void div() {
        	Calculator calc = new Calculator();
        	int result = calc.div(2, 3);
        	assertEquals(0, result);
    	}
}

Slik ser en typisk JUnit-test ut. Fra det interessante: den spesielle metoden assertEquals() brukes her : den sammenligner parameterne som sendes til den, som indikert av ordet likes i navnet.

Hvis parameterne som sendes til assertEquals() ikke er like, vil metoden gi et unntak og testen mislykkes. Dette unntaket vil ikke hindre andre tester i å kjøre.