[[oktatas:programozás:java:java_teszteles|< Java tesztelés]]
====== JUnit ======
* **Szerző:** Sallai András
* Copyright (c) 2014, Sallai András
* Szerkesztve: 2014, 2015
* Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC BY-SA 4.0]]
* Web: https://szit.hu
===== Telepítés =====
A használatához telepíteni kell a junit4 csomagot:
apt-get install junit4
Linuxon jelenleg csak egyetlen .jar kiterjesztésű állománnyal kell dolgoznunk. Telepítés után a helye:
/usr/share/java/junit4.jar
Vagy:
/usr/share/java/junit4-4.10.jar
Windows rendszerre, vagy ha legújabb JUnit csomagot akarjuk használni, látogassunk meg a JUnit weboldalát:
* http://junit.org
Windowson a következő két .jar kiterjesztésű fájlt kell beszereznünk:
- junit
- hamcrest-core
Ha Netbeans használunk, az tartalmaz egy JUnit csomagot telepítve.
===== Háromszög területe kivétel megkövetelesésével =====
import org.junit.Test;
import static org.junit.Assert.*;
public class HaromszogTeszt {
@Test
public void tesztSzamitTerulet() {
assertEquals(525, Haromszog.szamitTerulet(30, 35), 0);
assertEquals(900, Haromszog.szamitTerulet(40, 45), 0);
}
@Test(expected = IllegalArgumentException.class)
public void tesztExceptionSzamitTerulet() {
Haromszog.szamitTerulet(0, 35);
}
}
Windowsos Makefile:
all:
javac Haromszog.java
JUNIT=c:\bin\SWScite\SWScite_0.5.2_20140505\javalibs\junit-4.11.jar
HAMCREST=c:\bin\SWScite\SWScite_0.5.2_20140505\javalibs\hamcrest-core-1.3.jar
test:
javac -cp .;$(JUNIT);$(HAMCREST) HaromszogTeszt.java
java -cp .;$(JUNIT);$(HAMCREST) org.junit.runner.JUnitCore HaromszogTeszt
Linuxos makefile:
all:
javac Haromszog.java
JUNIT=/usr/share/java/junit4.jar
test:
javac -cp .:$(JUNIT) HaromszogTeszt.java
java -cp .:$(JUNIT) org.junit.runner.JUnitCore HaromszogTeszt
class Haromszog {
public static double szamitTerulet(int alap, int magassag) {
if (alap <= 0 || magassag <= 0) {
throw new IllegalArgumentException("Nem megfelelő paraméterek");
}
return (alap * magassag) / 2;
}
public static void main(String[] args) {
System.out.println(szamitTerulet(30, 45));
}
}
@echo off
java Haromszog & pause
#!/bin/bash
java Haromszog && read
===== ExpectedException használata =====
A kivételek kezelhetők az ExceptedException osztállyal is:
...
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
...
@Rule
public ExpectedException thrown = ExpectedException.none();
@Test
public void tesztExceptionSzamitTerulet()
{
thrown.expect(IllegalArgumentException.class);
Haromszog.szamitTerulet(0, 35);
}
...
A kivétel tesztelő metódusban, azaz a tesztExceptionSzamitTerulet()-ban meg kell hívnunk egy olyan paraméterrel a
tesztelt metódust, ami hibás paramétert tartalmaz.
package haromszog;
public class Haromszog {
public static double szamitTerulet(int alap, int magassag)
throws TulKisSzamException {
if (alap <= 0 || magassag <= 0) {
throw new TulKisSzamException("Túl kis számok");
}
return (alap * magassag) / 2;
}
public static void main(String[] args) throws IOException {
System.out.println(szamitTerulet(30, 45));
}
}
package haromszog;
public class TulKisSzamException extends Exception {
public TulKisSzamException(String msg){
super("Túl kis számok!");
}
}
Dobhattunk volna IllegalArgumentException-t is:
throw new IllegalArgumentException("Illegális paraméter!");
Így nem kellett volna saját kivétel készíteni, de kellett volna kezelni mindenféle illegális
paramétert azonnal. A HaromszogTest osztályban így nem kell eldobni a kivételeket.
A teljes lista:
package haromszog;
import org.junit.Test;
import static org.junit.Assert.*;
public class HaromszogTest {
@Test
public void tesztSzamitTerulet() {
assertEquals(525, Haromszog.szamitTerulet(30, 35), 0);
assertEquals(900, Haromszog.szamitTerulet(40, 45), 0);
}
@Test(expected = IllegalArgumentException.class)
public void tesztExceptionSzamitTerulet() {
Haromszog.szamitTerulet(0, 35);
}
}
package haromszog;
public class Haromszog {
public static double szamitTerulet(int alap, int magassag) {
if (alap <= 0 || magassag <= 0) {
throw new IllegalArgumentException("Nem megfelelő paraméterek");
}
return (alap * magassag) / 2;
}
public static void main(String[] args) {
System.out.println(szamitTerulet(43, 28));
}
}
Ebben a példában a teszteléshez külön osztályt készítettünk. A teszt futtatása a programfuttatástól egy
külön esemény. A teszt fordítását és futtatását látjuk az alábbiakban:
all:
javac Haromszog.java
JUNIT=/usr/share/java/junit4.jar
test:
javac -cp .:$(JUNIT) HaromszogTest.java
java -cp .:$(JUNIT) org.junit.runner.JUnitCore HaromszogTest
all:
javac Calc.java
JUNIT=c:\bin\SWScite\javalibs\junit-4.11.jar
HAMCREST=c:\bin\SWScite\javalibs\hamcrest-core-1.3.jar
test:
javac -cp .;$(JUNIT);$(HAMCREST) CalcTest.java
java -cp .;$(JUNIT);$(HAMCREST) org.junit.runner.JUnitCore CalcTest
===== Mire ne írjunk tesztet =====
* Olyan kód esetén, amely a csak a grafikus megjelenésért felel.
* Más keretrendszerek könyvtáraihoz.
* Triviális metódus. Ilyen lehet a set, get metódus.
* Külső erőforrásokra. Például állomány, adatbázis. Elég ha az elérhetőséget vizsgáljuk.
* Olyan kód esetén, amelynek a visszatérési értéke nem determinisztikus. Véletlen számok, szálkezelés.
===== Mire írjunk tesztet? =====
Aranyszabályként elfogadható, hogy az üzleti logikára kell tesztet írnunk.
Írjunk tesztet minden központi kódra, amely más modulokat hív.
Ha egy kódban sok hiba fordul elő, írjunk tesztet.
Ha mindig más és más fejlesztő változtatja meg a kódot, szintén a tesztírás
ajánlott.
===== Linkek =====
* http://junit.org/
* https://junit.org/junit5/docs/current/user-guide/ (2021)
* https://junit.org/junit5/docs/current/api/ (2021)