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

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:

Różnice pomiędzy JUnit i TestNG

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.