Ansluter JUnit-ramverket

För att testa Java-kod har vi ett bra ramverk som heter JUnit . Det fungerar utmärkt, det uppdateras ständigt, det är väldigt populärt och såklart är Intellij IDEA väldigt tätt integrerat med det.

Nu använder alla den femte versionen av detta ramverk - JUnit 5 , även om du i många projekt fortfarande kan hitta dess fjärde version. De är inte mycket olika, men vi ska ta en titt på den senaste ändå. Jag tror att när du börjar aktivt skriva prov kommer du att godkänna mitt val.

Så, hur lägger man till JUnit i projektet? Efter att ha lärt sig Maven kommer det att vara enkelt: lägg bara till den här koden till din pom.xml:

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

Förresten, om du vill att Maven ska köra dina tester på byggstadiet ( teststadiet ), måste du lägga till ytterligare ett fragment till 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

Låt oss säga att du har en klass som du vill testa. Vad är det bästa sättet att göra detta? Låt oss börja med ett exempel, för det är svårt att testa en abstrakt klass :)

Anta att vi har en Calculator- klass som kan utföra 4 grundläggande operationer: addition, subtraktion, multiplikation och division. Låt oss skriva 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 vill testa metoderna i denna klass. Man vet aldrig, i framtiden ändrar de något och allt kommer att sluta fungera. Hur kan vi skriva prov för det?

Vi måste skapa en annan klass. För att göra detta tar de vanligtvis samma namn och lägger till suffixet Test . För varje metod måste du lägga till minst en testmetod. Exempel:

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

Tidigare fanns det ett krav att metodnamnet skulle börja med ordet test , men detta krävs inte längre.

JUnit test exempel

Låt oss skriva några exempel där vi kommer att testa metoderna i vår CalculatorTest -klass :

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);
    	}
}

Så här ser ett typiskt JUnit-test ut. Från det intressanta: den speciella metoden assertEquals() används här : den jämför parametrarna som skickas till den, vilket indikeras av ordet equals i dess namn.

Om parametrarna som skickas till assertEquals() inte är lika, kommer metoden att skapa ett undantag och testet misslyckas. Detta undantag hindrar inte andra tester från att köras.