public class Calculator { public int evaluate(String expression) { int sum = 0; for (String summand: expression.split("\\+")) sum += Integer.valueOf(summand); return sum; } }
elementů programu, někdy i vytržených z kontextu - např. jednotlivých tříd a jejich souhry
určené k otestování právě integrované části kódu (např. po jeho změnách) do většího celku
ověřují, zda je SW přijatelný pro uživatele/klienta
org.junit.Assert
Jednotkové testy v JUnit mají v zásadě tuto strukturu:
test
nebo je opatřena příslušnou
anotací @Test
(JUnit 4.x) nebo obojí.
setUp
(nebo i jinou metodou anotovanou @Before
) — taková metoda obvykle vytvoří tzv. testovací přípravek (fixture);
tearDown
nebo metodou anotovanou @After
.
Note
|
Inicializační a uklizecí metody, stejně jako metody testu mají ve sterších JUnit (3.x) napevno předepsané názvy nebo přípony. Od 4.x lze označit anotacemi - ale pro přehlednost se jmenné konvence drží nadále. |
Testovaná třída Calculator
, jednoduchá sčítačka čísel
public class Calculator { public int evaluate(String expression) { int sum = 0; for (String summand: expression.split("\\+")) sum += Integer.valueOf(summand); return sum; } }
Testovací třída CalculatorTest
import static org.junit.Assert.assertEquals; import org.junit.Test; public class CalculatorTest { @Test // takto značíme testovací metodu public void evaluatesExpression() { Calculator calculator = new Calculator(); int sum = calculator.evaluate("1+2+3"); assertEquals(6, sum); // takto ověřujeme, zda se suma rovná } }
javac -cp .:junit-4.XX.jar CalculatorTest.java
java -cp .:junit-4.XX.jar:hamcrest-core-1.3.jar org.junit.runner.JUnitCore CalculatorTest
JUnit version 4.12 . Time: 0,006 OK (1 test)
Note
|
Lze také (a typičtěji se tak děje) spustit test přímo v integrovaném vývojovém prostředí (NetBeans apod.). |
@Test
@
)
@Test
před metodou označí tuto metodu za testovací.
testXXX
).
@Test public void addition() { assertEquals(12, simpleMath.add(7, 5)); }
@Before
a @After
@Before
bude spuštěna před každým testem.
@After
po každém testu.
setup
a tearDown
.
@Before public void runBeforeEveryTest() { simpleMath = new SimpleMath(); }
@Test(expected = ArithmeticException.class) public void divisionWithException() { // divide by zero simpleMath.divide(1, 0); }
@Ignore
@Ignore
(obvykle dočasně) testovací metodu vyloučíme z provádění.
@Ignore(“Not Ready to Run”) @Test public void multiplication() { assertEquals(15, simpleMath.multiply(3, 5)); }
@Test(timeout = 1000) public void infinity() { while (true) ; }