Felhasználói eszközök

Eszközök a webhelyen


oktatas:programozas:java:java_teszteles:junit5:kezdes

< JUnit5

JUnit5 kezdés

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.

Ne kézzel adjuk meg a test könyvtárat. Használjuk a Jobb egér gombra megjelenő menüt: Add Folder to Java Source Path

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:

Ha Maven-t használunk nincs szükség ezekre a beállításokra, mert ezek automatikusan beállításra kerülnek.

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));
    }
}
A org.junit.Test nem jó! Az a régebbi Test osztály.

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.

oktatas/programozas/java/java_teszteles/junit5/kezdes.txt · Utolsó módosítás: 2023/08/24 20:17 szerkesztette: admin