JUnit
Author
Albert FloresJUnit je framework pro jednotkové testy psaný v programovacím jazyce Java. Na jeho vývoji se podíleli vývojáři - Kent Beck a Erich Gamma. JUnit je pravděpodobně nejúspěšnější z rodiny xUnit frameworků, kterou odstartoval Kent Beck se svým SUnit pro Smalltalk.
Použití
Jednotkové testy jsou základním kamenem vývojových technik test-driven development a Extrémního programování a má se za to, že právě JUnit stojí za vznikem těchto programovacích technik. JUnit byl později portován na mnoho dalších jazyků, např. +more C# (NUnit), Python (PyUnit), Fortran (fUnit), Perl ([url=http://search. cpan. org/~adie/Test-Class-0. 24/lib/Test/Class. pm]Test::Class[/url] a [url=http://search. cpan. org/~mcast/Test-Unit-0. 25/lib/Test/Unit. pm]Test::Unit[/url]) a C++ (CPPUnit). Tato rodina frameworků pro jednotkové testy byla pojmenována xUnit.
Příklad
Mějme třídu Calculator ve které máme některé operace (sčítání a dělení). Pro tuto třídu jsou níže uvedeny JUnit testy pro verze 3.8, 4 a 5.
package mypackage;
public class Calculator { private double result = 0.0;
public void sum(double sum) { result += sum; }
public void divide(double divide) { result /= divide; }
public double getResult { return result; } }
JUnit verze 3.8
Tento unittest kontroluje správnost sčítání a návrat chybové hodnoty při dělení nulou.
package mypackage;
import junit.framework.*;
public class TestCalculator38 extends TestCase { public void testSum { Calculator calc = new Calculator; calc.sum(4.0); calc.sum(7.0); assertEquals(11.0, calc.getResult); }
public void testDivByZero { Calculator calc = new Calculator; calc.sum(4.0); calc.divide(0.0); assertTrue(Double.POSITIVE_INFINITY == calc.getResult); } }
JUnit verze 4
Tento test má stejnou funkcionalitu jako verze 3.8, jeho zápis však nevyžaduje, aby testovací metody začínaly předponou „test“. Syntaxe využívá novinek jazyka Java5 a novějších.
package mypackage;
import org.junit.*; import static org.junit.Assert.*;
public class TestCalculator4 { @Test public void sum { Calculator calc = new Calculator; calc.sum(4.0); calc.sum(7.0); assertEquals(11.0, calc.getResult); }
@Test public void divByZero { Calculator calc = new Calculator; calc.sum(4.0); calc.divide(0.0); assertTrue(Double.POSITIVE_INFINITY == calc.getResult); } }
JUnit verze 5
Tento test vychází z příkladu k verzi 4 s těmito rozdíly (pro JUnit 5): * všechny třídy frameworku JUnit jsou umístěny do nového package org. junit. +morejupiter. api * anotace @Test již nevyžaduje public metody a nemá žádné atributy (původní atributy expected a timout je řešeno modelem rozšíření) * používá se Java8.
package mypackage;
import org.junit.jupiter.api.*; import static org.junit.jupiter.api.Assertions.*;
public class TestCalculator5 {
@Test void sum { Calculator calc = new Calculator; calc.sum(4.0); calc.sum(7.0); assertEquals(11.0, calc.getResult, -> "Calculation error"); }
@Test void divByZero { Calculator calc = new Calculator; calc.sum(4.0); calc.divide(0.0); assertTrue(Double.POSITIVE_INFINITY
calc.getResult); } }
Spouštění testů
Většina nových verzí vývojových prostředí má integrovanou podporu pro spouštění JUnit testů, je ale možné testy spustit i zvlášť a to buď s textovým nebo grafickým výstupem nebo přímo v programu pomocí příslušných tříd frameworku JUnit.
Související články == * Unit testing * Platforma Java * Extrémní programování * Testování softwaru