Tartalomjegyzék
JUnit
- Szerző: Sallai András
- Copyright © 2014, Sallai András
- Szerkesztve: 2014, 2015
- Licenc: 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:
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
- HaromszogTeszt.java
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:
- 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:
- 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
- Haromszog.java
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)); } }
- startHaromszog.bat
@echo off java Haromszog & pause
- startHaromszog.sh
#!/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.
- Haromszog.java
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)); } }
- TulKisSzamException.java
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:
- HaromszogTest.java
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); } }
- Haromszog.java
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:
- Makefile.lin
all: javac Haromszog.java JUNIT=/usr/share/java/junit4.jar test: javac -cp .:$(JUNIT) HaromszogTest.java java -cp .:$(JUNIT) org.junit.runner.JUnitCore HaromszogTest
- Makefile.win
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.