JUnit

JUnit
VývojářKent Beck, Erich Gamma, David Saff
Aktuální verze5.12.2 (11. dubna 2025)
Operační systémCross-platform
PlatformaJava Virtual Machine
Vyvíjeno vJava
Typ softwaruJednotkové testy
LicenceCommon Public License
Webjunit.org
Některá data mohou pocházet z datové položky.

JUnit 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.

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ř. C# (NUnit), Python (PyUnit), Fortran (fUnit), Perl (Test::Class a Test::Unit) a C++ (CPPUnit). Tato rodina frameworků pro jednotkové testy byla pojmenována xUnit.

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

[editovat | editovat zdroj]

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

[editovat | editovat zdroj]

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

[editovat | editovat zdroj]

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.jupiter.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ů

[editovat | editovat zdroj]

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

[editovat | editovat zdroj]