Свързване на рамката JUnit
За тестване на Java code имаме страхотна рамка, наречена JUnit . Работи страхотно, постоянно се актуализира, много е популярен и разбира се Intellij IDEA е много тясно интегриран с него.
Сега всички използват петата version на тази рамка - JUnit 5 , въпреки че в много проекти все още можете да намерите четвъртата й version. Не са много по-различни, но все пак ще разгледаме най-новия. Мисля, че докато започнеш активно да пишеш тестове, ще одобриш избора ми.
И така, How да добавите JUnit към проекта? След като научите Maven, ще бъде лесно: просто добавете този code към вашия pom.xml:
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.8.1</version>
<scope>test</scope>
</dependency>
Между другото, ако искате Maven да изпълнява вашите тестове на етапа на изграждане ( тестов етап ), тогава трябва да добавите още един фрагмент към 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 анотация
Да приемем, че имате клас, който искате да тествате. Кой е най-добрият начин да направите това? Нека започнем с пример, защото е трудно да се тества абстрактен клас :)
Да предположим, че имаме клас Calculator , който може да изпълнява 4 основни операции: събиране, изваждане, умножение и деление. Нека го напишем:
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;
}
}
Искаме да тестваме методите на този клас. Никога не се знае, в бъдеще ще променят нещо и всичко ще спре да работи. Как можем да напишем тестове за него?
Трябва да създадем друг клас. За да направят това, те обикновено вземат същото име и добавят суфикса Test . За всеки метод трябва да добавите поне един тестов метод. Пример:
class CalculatorTest {
@Test
public void add() {
}
@Test
public void sub() {
}
@Test
public void mul() {
}
@Test
public void div() {
}
}
Преди имаше изискване името на метода да започва с думата test , но това вече не се изисква.
Примери за JUnit тестове
Нека напишем няколко примера, в които ще тестваме методите на нашия клас 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);
}
}
Ето How изглежда един типичен JUnit тест. От интересното: тук се използва специалният метод assertEquals() : той сравнява подадените към него параметри, Howто е посочено от думата равно в името му.
Ако параметрите, предадени на assertEquals() , не са равни, методът ще хвърли изключение и тестът ще бъде неуспешен. Това изключение няма да попречи на други тестове да се изпълняват.
GO TO FULL VERSION