TestNG vs JUnit – Różnica między nimi
Kluczowa różnica między TestNG i JUnit
- TestNG jest Java- oparte na frameworku, podczas gdy JUnit to framework do testów jednostkowych typu open source dla języka JAVA.
- Porównując TestNG Vs JUnit, TestNG adnotacje są łatwiejsze w użyciu i zrozumieniu niż JUnit.
- TestNG pozwala nam tworzyć testy równoległe, natomiast JUnit nie obsługuje uruchamiania testów równoległych.
- In TestNG, Przypadki testowe można grupować razem JUnit, Grupowanie testów razem nie jest możliwe.

Co to jest TestNG?
TestNG to framework do testów automatycznych, w którym NG oznacza „Next Generation”. TestNG jest inspirowany JUnit który używa adnotacji (@). TestNG pokonuje wady JUnit i jest przeznaczony do wykonywania testy end-to-end łatwe.
Korzystanie z TestNG, możesz wygenerować odpowiedni raport i łatwo dowiedzieć się, ile przypadków testowych zostało zaliczonych, nieudanych lub pominiętych. Nieudane przypadki testowe można wykonać osobno.
Czym jest Junit?
JUnit jest jednostką open source Testowanie Framework dla JAVA. Przydaje się Java Programiści piszą i uruchamiają powtarzalne testy. Początkowo opracowują go Erich Gamma i Kent Beck. Jest to przykład architektury xUnit. Jak sama nazwa wskazuje, jest on używany do Testów jednostkowych małego fragmentu kodu.
Programiści stosujący metodologię sterowaną testami muszą najpierw napisać i wykonać testy jednostkowe, zanim stworzą jakikolwiek kod.
Kiedy już skończysz z kodem, powinieneś wykonać wszystkie testy i powinien on przejść pomyślnie. Za każdym razem, gdy dodawany jest jakikolwiek kod, należy ponownie wykonać wszystkie przypadki testowe i upewnić się, że nic nie jest uszkodzone.
Różnice pomiędzy JUnit i TestNG
Obie TestNG i JUnit4 wygląda podobnie, z wyjątkiem jednej lub dwóch funkcji. Dokonajmy porównania między nimi, aby szybko zdecydować, która technologia jest bardziej korzystna dla testów jednostkowych. Poniższa tabela przedstawia funkcje obsługiwane przez oba:
Adnotacje
Obie JUnit i TestNG używa adnotacji i prawie wszystkie adnotacje wyglądają podobnie.
TestNG używa @BeforeMethod ,@AfterMethod podobnie jak @Before ,@After in JUnit4.
Obie TestNG a Junit4 używa @Test(timeout = 1000) dla limitu czasu. Sprawdź poniższą tabelę, aby uzyskać więcej szczegółów-
SNA | Opis | TestNG | JUnit 4 |
---|---|---|---|
1 | Adnotacja testowa | @Test | @Test |
2 | Wykonuje się przed wywołaniem pierwszej metody testowej w bieżącej klasie | @Przed zajęciami | @Przed zajęciami |
3 | Wykonuje się po wszystkich metodach testowych w bieżącej klasie | @Po zajęciach | @Po zajęciach |
4 | Wykonuje się przed każdą metodą testową | @Bez tytułu | @Zanim |
5 | Wykonuje się po każdej metodzie testowej | @Poradnik | @Po |
6 | adnotacja o zignorowaniu testu | @Test(włącz=fałsz) | @ignorować |
7 | adnotacja dla wyjątku | @Test(expectedExceptions = ArithmeticException.class) | @Test(oczekiwany = ArithmeticException.class) |
8 | Timeout | @Test(limit czasu = 1000) | @Test(limit czasu = 1000) |
9 | Wykonuje się przed wszystkimi testami w pakiecie | @Bezpieczeństwo | n / a |
10 | Wykonuje się po wszystkich testach w pakiecie | @AfterSuite | n / a |
11 | Wykonuje się przed uruchomieniem testu | @Przed testem | n / a |
12 | Wykonuje się po uruchomieniu testu | @PoTest | n / a |
13 | Wykonuje się przed wywołaniem pierwszej metody testowej należącej do którejkolwiek z tych grup | @PrzedGrupami | n / a |
14 | uruchom po ostatniej metodzie testowej należącej do którejkolwiek z poniższych grup | @PoGrupy | n / a |
Test pakietu
Zestawy służą do jednoczesnego wykonywania wielu testów. Zestawy można tworzyć przy użyciu obu TestNG i JUnit4. Jednak zestawy mają większą moc TestNG ponieważ wykorzystuje zupełnie inną metodę wykonywania testów. Rozumiemy to za pomocą fragmentu kodu podanego poniżej:
Korzystanie z JUnit4
Poniższa klasa opisuje użycie pakietu podczas pracy JUnit4:
package guru99.junit; import org.junit.runner.RunWith; import org.junit.runners.Suite; @RunWith(Suite.class) @Suite.SuiteClasses({ SuiteTest1.class, SuiteTest2.class, }) public class JunitTest { // This class remains empty,it is used only as a holder for the above annotations }
Korzystanie z TestNG
TestNG używa XML do zebrania wszystkich testów w jednym miejscu. Poniżej XML opisuje użycie pakietu podczas pracy TestNG:
<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" > <suite name="My test suite"> <test name="testing"> <classes> <class name="com.guru99.SuiteTest1" /> <class name="com.guru99.SuiteTest2" /> </classes> </test> </suite>
Ignoruj test
Używając obu, możemy pominąć test. Zobaczmy to na przykładzie kodu podanego poniżej:
Korzystanie z JUnit4
Poniższy fragment kodu opisuje użycie adnotacji @ignore podczas pracy z JUnit4:
@Ignore public void method1() { System.out.println("Using @Ignore , this execution is ignored"); }
Korzystanie z TestNG
Poniższy fragment kodu opisuje użycie adnotacji @Test(enabled=false) podczas pracy TestNG:
@Test(enabled=false) public void TestWithException() { System.out.println("Method should be ignored as it's not ready yet"); }
Test wyjątku
Testowanie wyjątków jest dostępne zarówno w TestNG i JUnit4. Służy do sprawdzenia, jaki wyjątek zostanie zgłoszony z testu?
Korzystanie z JUnit4
Poniższy fragment kodu opisuje użycie testu wyjątków podczas pracy JUnit4:
@Test(expected = ArithmeticException.class) public void divideByZero() { Int i = 1/0; }
Korzystanie z TestNG
Poniższy fragment kodu opisuje użycie testu wyjątków podczas pracy TestNG:
@Test(expectedExceptions = ArithmeticException.class) public void divideByZero() { Int i = 1/0; }
Timeout
Funkcja ta jest zaimplementowana zarówno w TestNg, jak i JUnit4. Limit czasu służy do zakończenia testu, który trwa dłużej niż określony czas (w milisekundach).
Korzystanie z JUnit4
Poniższy fragment kodu opisuje użycie testu limitu czasu podczas pracy JUnit4:
@Test(timeout = 1000) public void method1() { while (true); }
Korzystanie z TestNG
Poniższy fragment kodu opisuje użycie testu limitu czasu podczas pracy TestNG:
@Test(timeOut = 1000) public void method1() { while (true); }
Test sparametryzowany
JUnit zapewnia łatwiejsze i bardziej czytelne podejście do testowania znane jako test parametryzowany. Oba TestNG i JUnit obsługuje test sparametryzowany, ale różnią się sposobem definiowania wartości parametru. Zobaczmy to jeden po drugim.
Korzystanie z JUnit4
Adnotacje „@RunWith” i „@Parameter” służą do podawania wartości parametrów do testu jednostkowego. Adnotacja @Parameters musi zwrócić List[] . Parametr ten zostanie przekazany do konstruktora klasy jako argument.
@RunWith(value = Parameterized.class) public class JunitTest{ privateint number; public JunitTest6(int number) { this.number = number; } @Parameters public static Collection<Object[]> data() { Object[][] data = new Object[][] { { 1 }, { 2 }, { 3 }, { 4 } }; returnArrays.asList(data); } @Test public void parameterTest() { System.out.println("Parameterized Number is : " + number); } }
Korzystanie z TestNG
In TestNG, plik XML lub „@DataProvider” służy do zapewnienia parametru do testowania.
Tutaj adnotacja @Parameters zadeklarowana w metodzie wymaga parametru do testowania. Dane użyte jako parametr zapewnią w TestNGpliki konfiguracyjne XML. Robiąc to, możemy ponownie wykorzystać pojedynczy Przypadek testowy z różnymi zbiorami danych i możemy uzyskać różne wyniki.
public class Test1 { @Test @Parameters(value="number") public void parameterTest(int number) { System.out.println("Parameterized Number is : " + number); } }
Zobacz poniższy plik XML do wykorzystania w powyższej klasie:
<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" > <suite name="My test suite"> <test name="testing"> <parameter name="number" value="2"/> <classes> <class name="com.guru99.Test1" /> </classes> </test> </suite>
Podsumowanie
Widzieliśmy JUnit4 i TestNG porównanie w szczegółach. Widzieliśmy również, że oba są podobne, z wyjątkiem testu parametryzowanego i testu zależności. Krótko mówiąc, możemy powiedzieć, że w oparciu o elastyczność i wymagania możemy wybrać dowolny z nich do testów jednostkowych.