A JUnit a Java egységtesztelő keretrendszere. Jelenleg verziója 5.
Webhely:
Töltsük le a JUnit legújabb verzióját.
Két fájlra van szükség.
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:
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:
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.
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.
{ "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:
{ "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:
Egy tesztosztályt létre kell hozni. Addig nem fogadja el a test könyvtárat.
Pl.
class ValamiTest { }
Újraindítás után útvonalba lesz a test.
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!
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)); } }
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”.
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; } }
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); } }
assertEquals() | Egyenlő? |
assertSame() | Ugyanaz az objektum? |
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");
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")));
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); } }
Hozzuk létre a tesztelő osztályt.
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:
public class Triangle { public double caclArea() { return 0; } }
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
Í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.
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
A tasks.json fájl a felhasználó profil könyvtárába is tehető:
De elhelyezhető a projekt könyvtárban a .vscode könyvtárban is.
{ "version": "2.0.0", "tasks": [ { "label": "JUnit teszt futtatása", "type": "shell", "command" : "./scripts/test.sh", "windows": { "command": ".\\scripts\\test.cmd" }, }, ] }
Futtatás:
Az újabb felületen meg kell jelenjen a „label”-ben szereplő felirat. Válasszuk ki.