Łączenie frameworka JUnit
Do testowania kodu Java mamy świetny framework o nazwie JUnit . Działa świetnie, jest stale aktualizowany, jest bardzo popularny i oczywiście Intellij IDEA jest z nim bardzo ściśle zintegrowany.
Teraz wszyscy używają piątej wersji tego frameworka - JUnit 5 , choć w wielu projektach wciąż można spotkać jego czwartą wersję. Niewiele się różnią, ale i tak przyjrzymy się najnowszemu. Myślę, że zanim zaczniesz aktywnie pisać testy, zaakceptujesz mój wybór.
Jak więc dodać JUnit do projektu? Po nauczeniu się Mavena będzie to łatwe: po prostu dodaj ten kod do swojego pom.xml:
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.8.1</version>
<scope>test</scope>
</dependency>
Nawiasem mówiąc, jeśli chcesz, aby Maven uruchamiał twoje testy na etapie kompilacji ( test stage ), musisz dodać jeszcze jeden fragment do 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>
@Adnotacja testowa
Załóżmy, że masz klasę, którą chcesz przetestować. Jaki jest najlepszy sposób na zrobienie tego? Zacznijmy od przykładu, bo ciężko jest przetestować klasę abstrakcyjną :)
Załóżmy, że mamy klasę Calculator , która może wykonywać 4 podstawowe operacje: dodawanie, odejmowanie, mnożenie i dzielenie. napiszmy to:
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;
}
}
Chcemy przetestować metody tej klasy. Nigdy nie wiadomo, w przyszłości coś zmienią i wszystko przestanie działać. Jak możemy napisać dla niego testy?
Musimy stworzyć kolejną klasę. Aby to zrobić, zwykle przyjmują tę samą nazwę i dodają przyrostek Test . Do każdej metody należy dodać co najmniej jedną metodę testową. Przykład:
class CalculatorTest {
@Test
public void add() {
}
@Test
public void sub() {
}
@Test
public void mul() {
}
@Test
public void div() {
}
}
Kiedyś wymagano, aby nazwa metody zaczynała się od słowa test , ale nie jest to już wymagane.
Przykłady testów JUnit
Napiszmy kilka przykładów, w których przetestujemy metody naszej klasy 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);
}
}
Tak wygląda typowy test JUnit. Z ciekawostek: zastosowano tu specjalną metodę assertEquals() : porównuje ona przekazane jej parametry, na co wskazuje słowo equals w swojej nazwie.
Jeśli parametry przekazane do assertEquals() nie są równe, metoda zgłosi wyjątek i test zakończy się niepowodzeniem. Ten wyjątek nie zapobiegnie uruchomieniu innych testów.
GO TO FULL VERSION