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, rozdíl) – pro reálné hodnoty assertTrue(obdržený výsledek) assertTrue(obdržený výsledek)
tolerovaný
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 import import import
org.junit.Test; org.junit.Before; org.junit.After; static org.junit.Assert.*;
public class KruhTest { @Test public void testVratObsah() { System.out.println ("vratObsah"); Kruh instance = new Kruh (10); assertEquals(Math.PI * 10d * 10d, instance.vratObsah (), 0.0001); } @Test 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 import import import
org.junit.After; org.junit.Before; org.junit.Test; static org.junit.Assert.*;
public class ObdelnikTest { @Test 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
@Test public void testVratObvod() { System.out.println("test metody vratObvod()"); Obdelnik instance = new Obdelnik(10, 50); assertEquals(10+10+50+50, instance.vratObvod()); } @Test 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 import import import
org.junit.After; org.junit.Before; org.junit.Test; 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
{ } @Test public void testVratObsah() { Trojuhelnik trojuhel1 = new Trojuhelnik(3, 5, 4); assertEquals(6, trojuhel1.vratObsah(), 0.0001); } @Test public void testVratObvod() { Trojuhelnik trojuhel1 = new Trojuhelnik(4, 5, 3); assertEquals(12, trojuhel1.vratObvod()); } @Test 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