Conectarea cadrului JUnit

Pentru a testa codul Java, avem un cadru grozav numit JUnit . Funcționează excelent, este actualizat în mod constant, este foarte popular și, desigur, Intellij IDEA este foarte strâns integrat cu el.

Acum toată lumea folosește cea de-a cincea versiune a acestui cadru - JUnit 5 , deși în multe proiecte puteți găsi încă a patra versiune. Nu sunt foarte diferite, dar oricum vom arunca o privire la cel mai recent. Cred că până când vei începe să scrii în mod activ teste, vei aproba alegerea mea.

Deci, cum să adăugați JUnit la proiect? După ce ați învățat Maven, va fi ușor: trebuie doar să adăugați acest cod pe pom.xml:

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

Apropo, dacă doriți ca Maven să vă ruleze testele în etapa de construire ( etapa de testare ), atunci trebuie să adăugați încă un fragment la 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>

@Test adnotare

Să presupunem că aveți o clasă pe care doriți să o testați. Care este cel mai bun mod de a face asta? Să începem cu un exemplu, pentru că este greu să testezi o clasă abstractă :)

Să presupunem că avem o clasă Calculator care poate efectua 4 operații de bază: adunare, scădere, înmulțire și împărțire. Hai sa o scriem:

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

Dorim să testăm metodele acestei clase. Nu se știe niciodată, în viitor ei schimbă ceva și totul va înceta să funcționeze. Cum putem scrie teste pentru el?

Trebuie să creăm o altă clasă. Pentru a face acest lucru, de obicei iau același nume și adaugă sufixul Test . Pentru fiecare metodă, trebuie să adăugați cel puțin o metodă de testare. Exemplu:

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

A fost o cerință ca numele metodei să înceapă cu cuvântul test , dar acest lucru nu mai este necesar.

Exemple de teste JUnit

Să scriem câteva exemple în care vom testa metodele clasei noastre CalculatorTest :

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

Așa arată un test JUnit tipic. Dintre interesant: aici este folosită metoda specială assertEquals() : compară parametrii trecuți, așa cum este indicat de cuvântul equals din numele său.

Dacă parametrii trecuți către assertEquals() nu sunt egali, metoda va arunca o excepție și testul va eșua. Această excepție nu va împiedica rularea altor teste.