Java testovací třída Kapitola má seznámit s možnostmi testovací třídy. Zdroje: http://voho.cz/wiki/informatika/vyvoj/testovani/, Ing. Vojtěch HORDĚJČUK: Testování, 15.3.2013 Rudolf Pecinovský: Java 7, Grada Publishing. a.s., 2012 Klíčové pojmy: Testovací třída Testovací třída určena pro testování správnosti funkcí programu (jednotka může být třída, část třídy nebo celý projekt) obsahuje jednotlivé testy v knihovně JUnit přilepí se na třídu, kterou chceme testovat odvodí od ni svůj název Vytvoření testovací třídy v místní nabídce třídy, kterou budeme chtít testovat, dáme Vytvořit testovací třídu v BlueJ nová testovací třda má ve štítku v UML diagramu unit test Struktura testovací třídy testovací přípravek = stav, v němž je testovaná třída připravena k testování vytvoří se vždy před spuštěním testů metoda vytvářející přípravek obsahuje automaticky všechny akce, které jsme provedli od posledního restartu vietuálního stroje provedeme akci vytvoření objektu? nabídka testovací třídy: Dosavadní činnost -> Testovací přípravek vyzkoušení funkce: Testovací přípravek -> Zásobník odkazů Testovací metody můžeme je vytvořit ručně 2013-03-19 Java - testovací třída 1/8
obecně mají tvar: assertequals(popis, ečekávaná hodnota, obdržená hodnota) assertequals(popis, ečekávaná hodnota, obdržená hodnota, tolerovaný rozdíl) pro reálné hodnoty asserttrue(obdržený výsledek) asserttrue(obdržený výsledek) můžeme je vytvořit ručně: Příklad Obrazce public class Kruh private int polomer; public Kruh(int polomer) this.polomer = polomer; public double vratobsah() return Math.PI * this.polomer * this.polomer; public double vratobvod() return 2d * Math.PI * this.polomer; import org.junit.test; import org.junit.before; import org.junit.after; import static org.junit.assert.*; public class KruhTest public void testvratobsah() System.out.println ("vratobsah"); Kruh instance = new Kruh (10); assertequals(math.pi * 10d * 10d, instance.vratobsah (), 0.0001); public void testvratobvod() System.out.println("vratObvod"); Kruh instance = new Kruh (20); assertequals(2d * Math.PI * 20d, instance.vratobvod (), 0.0001); /*************************************************************************** * Inicializace předcházející spuštění každého testu a připravující tzv. 2013-03-19 Java - testovací třída 2/8
* přípravek (fixture), což je sada objektů, s nimiž budou testy pracovat. */ @Before public void setup() /*************************************************************************** * Úklid po testu - tato metoda se spustí po vykonání každého testu. */ @After public void teardown() public class Obdelnik private int sirka; private int vyska; public Obdelnik(int sirka, int vyska) this.sirka = sirka; this.vyska = vyska; public int vratobsah() return this.vyska * this.sirka; public int vratobvod() return 2 * (this.vyska + this.sirka); public boolean jectverec() return (this.sirka == this.vyska); import org.junit.after; import org.junit.before; import org.junit.test; import static org.junit.assert.*; public class ObdelnikTest public void testvratobsah() System.out.println ("vratobsah"); Obdelnik instance1 = new Obdelnik (50, 100); assertequals(50*100, instance1.vratobsah ()); 2013-03-19 Java - testovací třída 3/8
public void testvratobvod() System.out.println("test metody vratobvod()"); Obdelnik instance = new Obdelnik(10, 50); assertequals(10+10+50+50, instance.vratobvod()); public void testjectverec() System.out.println("test metody jectverec()"); Obdelnik instance1 = new Obdelnik(10, 10); asserttrue(instance1.jectverec()); Obdelnik instance2 = new Obdelnik(20, 10); assertfalse(instance2.jectverec()); @Before public void setup() @After public void teardown() 2013-03-19 Java - testovací třída 4/8
Mohu je také vytvořit automaticky pomocí nástroje BluJ: restartovat virtuální stroj z nabídky: vytvořit testovací metodu jméno testu: test... spustí se metoda vytvářející testovací přípravek mohu začít posílat zprávy, které budou součástí vytvářeného testu vytvořím instanci zavolám pro ni testovanou metodu do metody zapíši také předpokládaný výsledek, případně toleranci (nabízí se sama) ublic class Trojuhelnik private int stranaa; private int stranab; private int stranac; public Trojuhelnik(int stranaa, int stranab, int stranac) this.stranaa = stranaa; this.stranab = stranab; this.stranac = stranac; 2013-03-19 Java - testovací třída 5/8
public double vratobsah() double s = (double)this.vratobvod()/2; return Math.sqrt(s*(s-stranaA)*(s-stranaB)*(s-stranaC)); public int vratobvod() return this.stranaa + this.stranab + this.stranac; public boolean jetrojuhelnik() if (this.stranaa+this.stranab > this.stranac && this.stranaa+this.stranac > this.stranab && this.stranac+this.stranab > this.stranaa) return true; else return false; 2013-03-19 Java - testovací třída 6/8
import org.junit.after; import org.junit.before; import org.junit.test; import static org.junit.assert.*; public class TrojuhelnikTest /*************************************************************************** * Inicializace předcházející spuštění každého testu a připravující tzv. * přípravek (fixture), což je sada objektů, s nimiž budou testy pracovat. */ @Before public void setup() /*************************************************************************** * Úklid po testu - tato metoda se spustí po vykonání každého testu. */ @After public void teardown() 2013-03-19 Java - testovací třída 7/8
public void testvratobsah() Trojuhelnik trojuhel1 = new Trojuhelnik(3, 5, 4); assertequals(6, trojuhel1.vratobsah(), 0.0001); public void testvratobvod() Trojuhelnik trojuhel1 = new Trojuhelnik(4, 5, 3); assertequals(12, trojuhel1.vratobvod()); public void testjetrojuhlenik() Trojuhelnik trojuhel1 = new Trojuhelnik(4, 5, 6); assertequals(true, trojuhel1.jetrojuhelnik()); Trojuhelnik trojuhel2 = new Trojuhelnik(2, 4, 7); assertequals(false, trojuhel2.jetrojuhelnik()); Trojuhelnik trojuhel3 = new Trojuhelnik(10, 5, 3); assertequals(false, trojuhel3.jetrojuhelnik()); Trojuhelnik trojuhel4 = new Trojuhelnik(2, 8, 6); assertequals(false, trojuhel4.jetrojuhelnik()); Mohu spouštět testy pro jednotlivé metody, třídy, nebo také spustit test pro celý projekt (volba Spustit testy) 2013-03-19 Java - testovací třída 8/8