Tartalomjegyzék
JUnit5 kezdés
- Szerző: Sallai András
- Copyright © 2021, Sallai András
- Szerkesztve: 2021, 2023
- Licenc: CC BY-SA 4.0
- Web: https://szit.hu
A JUnit
A JUnit a Java egységtesztelő keretrendszere. Jelenleg verziója 5.
Webhely:
Beszerzés
Töltsük le a JUnit legújabb verzióját.
Két fájlra van szükség.
Visual Studio Code bővítmény
- Test Runner for Java
junit-juipter-api
A weboldal jobb oldalán keressük meg a „Latest Release” feliratot. Alatta válasszuk a „Jupiter v5.x.y” verziót.
A Maven tároló új oldalát kapjuk.
Keressük a következő csomagot:
- junit-jupiter-api
junit-platform-console-standalone
A weboldal jobb oldalán keressük meg a „Latest Release” feliratot. Alatta válasszuk a „Platform v1.x.y” verziót.
A Maven tároló új oldalát kapjuk.
Keresőbe írjuk be:
- junit-platform-console-standalone
Telepítés
Visual Studio Code
A letöltés után kapunk egy junit-jupiter-api-5.x.y.jar és egy junit-platform-console-standalone-1.x.y.jar nevű fájlt. Az x.y helyén különböző verziószámok lehetnek.
Letölthetjük az adott projekt lib könyvtárába, vagy a felhasználói könyvtárban egy Library/junit könyvtárba. Utóbbi esetben más projektekhez is használható.
Ha projekt lib könyvtárába töltjük, akkor azonnal használható.
Ha ~/Library/junit könyvtárba töltöttük, akkor a projekt beállításainál ki kell tallóznunk.
Tesztelés megkezdése
Visual Studio Code - build eszköz nélkül
Hozzuk létre egy test nevű könyvtárat a projekt gyökérkönyvtárában.
Állítsuk be a projekt könyvtárában található .vscode/settings.json fájlban a test könyvtárat is java.project.sourcePath tömbjében.
Legyen megnyitva az App.java fájl. Majd a már létező test könyvtár felett jobb egér gomb, majd a menüből válasszuk a következőt: Add Folder to Java Source Path.
- .vscode/settings.json
{ "java.project.sourcePaths": ["src", "test"], "java.project.outputPath": "bin" }
Egészítsük ki a következővel:
"java.test.config": { "name": "Java teszt", "workingDirectory": "${workspaceFolder}", },
Teljes JSON fájl, hivatkozásokkal együtt:
- .vscode/settings.json
{ "java.project.sourcePaths": ["src", "test"], "java.project.outputPath": "bin", "java.project.referencedLibraries": [ "lib/**/*.jar", "/home/andras/Library/junit/junit-jupiter-api-5.8.1.jar", "/home/andras/Library/junit/junit-platform-console-standalone-1.8.1.jar" ], "java.test.config": { "name": "Java teszt", "workingDirectory": "${workspaceFolder}", }, }
Egyéb beállíátsok:
Teszt hivatalos oldal:
Teszt osztály
Egy tesztosztályt létre kell hozni. Addig nem fogadja el a test könyvtárat.
Pl.
- test/ValamiTest.java
class ValamiTest { }
Újraindítás után útvonalba lesz a test.
Projekt útvonal
Az alábbi beállítás akkor fontos, ha például szeretnénk fájlt megnyitni az aktuális projekt könyvtárában:
"java.test.config": { "name": "Java teszt", "workingDirectory": "${workspaceFolder}", },
Ha ezt nem állítjuk be, a teszt futtatásakor az aktuális könyvtár valami útvonala a felhasználó saját könyvtárán belül a .config/Code/User/workspaceStorage/ könyvtárban.
Lehet a test könyvtáron belül szeretnénk Mocking céljából egy fájlt megnyitni. Erre a beállításra szükség van!
Egyszerű egyezés
- TriangleTest.java
import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; public class TriangleTest { Triangle triangle; @BeforeEach public void initEach() { triangle = new Triangle(); } @Test public void testCalcArea() { assertEquals(525, triangle.calcArea(30, 35)); } }
Futtatás
A Visual Studio Code akciósávján van egy Teszt ikon. Válasszuk ki. Ha tesztet sikeresen beállítottuk megjelenik és futtathatjuk a „lejátszógombbal”.
AAA
- Arrange: adatok beállítása, előkészítése
- Act: tesztelt metódus hívása
- Assert: Ellenőrzés
- Circle.java
public class Circle { private double radius; public double calcArea() { return Math.PI * Math.pow(this.radius, 2); } public void setRadius(double radius) { this.radius = radius; } }
- CircleTest.java
import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; public class CircleTest { private Circle circle; @BeforeEach public void init() { this.circle = new Circle(); } @Test public void testCalcArea() { //Arrange - szervezés, felkészülés double radius = 30; double expected = 2827.43; circle.setRadius(radius); //Act - akció double actual = circle.calcArea(); //Assert - állítás, ellenőrzés assertEquals(expected, actual, 0.01); } }
Assertions metódusok
assertEquals() | Egyenlő? |
assertSame() | Ugyanaz az objektum? |
assertEquals()
- assertEquals(elvárt, aktuális, delta)
Ennyi lehet az eltérés. Double típus esetén például ha két tizedesjegy egyezés szükséges, akkor a delta legyen 0.01.
Delta (megengedett eltérés):
assertEquals(expected, actual, 0.01);
Plusz információ megjelenítése:
assertEquals(expected, actual, 0.01, "Kör terület ellenőrzés");
A szöveg csak akkor jelenik meg, ha sikertelen a teszt.
A negyedik paraméter lehet függvény is:
assertEquals(expected, actual, 0.01, () -> "Kör terület ellenőrzés");
Listák összehasonlítása
ArrayList<String> nevek = new ArrayList<>(); nevek.add("egy"); nevek.add("kettő"); nevek.add("három"); boolean a = (nevek.equals(Arrays.asList("egy", "kettő", "három")));
Típusvizsgálat
- FileloadTest.java
import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.ArrayList; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.BeforeEach; public class FileloadTest { Fileload fileload; @BeforeEach public void initEach() { fileload = new Fileload(); } @Test public void testEmployeeListType() { assertTrue(fileload.getLines() instanceof ArrayList); } }
TDD
Kezdés
Hozzuk létre a tesztelő osztályt.
- TriangleTest.java
import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; public class TriangleTest { Triangle triangle; @BeforeEach public void initEach() { triangle = new Triangle(); } @Test public void testCalcArea() { assertEquals(0, triangle.caclArea()); } }
Jobb oldalon a normál futtatás gombbal futtassuk.
Fejlesszük az ipari kódot, de csak addig, amíg teljesül a teszt:
- src/Triangle.java
public class Triangle { public double caclArea() { return 0; } }
Alternatív futtatási módok
Futtatás parancssorból
Szükség van a lib könyvtárban a junit-platform-console-standalone jar fájl egy példányára. A példában az 1.8.1-s verzió szerepel, be kell helyettesíteni a saját verziót.
Feltételezzük, hogy a forrásfájlok az src könyvtárban vannak, és az out könyvtár nem létezik.
javac -d out src/*.java javac -d out -cp out:lib/junit-platform-console-standalone-1.8.1.jar test/*.java java -jar lib/junit-platform-console-standalone-1.8.1.jar -cp out --scan-class-path
Script készítése
Írjuk a három sort egy scripts nevű könyvtárban egy test.sh fájlba. Unix alapú rendszeren adjunk rá futtatási jogot. Windowson test.cmd nevű scriptet írjunk.
- scripts/test.sh
javac -d out src/*.java javac -d out -cp out:lib/junit-platform-console-standalone-1.8.1.jar test/*.java java -jar lib/junit-platform-console-standalone-1.8.1.jar -cp out --scan-class-path
Task futtatása
A tasks.json fájl a felhasználó profil könyvtárába is tehető:
- ~/.config/Code/User
De elhelyezhető a projekt könyvtárban a .vscode könyvtárban is.
- .vscode/tasks.json
{ "version": "2.0.0", "tasks": [ { "label": "JUnit teszt futtatása", "type": "shell", "command" : "./scripts/test.sh", "windows": { "command": ".\\scripts\\test.cmd" }, }, ] }
Futtatás:
- F1
- Tasks: Run Task
Az újabb felületen meg kell jelenjen a „label”-ben szereplő felirat. Válasszuk ki.