TestNG vs JUnit - Differenza tra loro
Differenza chiave tra TestNG e JUnit
- TestNG è un Javaquadro basato, mentre JUnit è un framework di unit test open source per JAVA.
- Confronto TestNG Vs JUnit, TestNG le annotazioni sono più facili da usare e comprendere rispetto a JUnit.
- TestNG ci permette di creare test paralleli, mentre JUnit non supporta l'esecuzione di test paralleli.
- In TestNG, I casi di test possono essere raggruppati insieme, mentre sono in JUnit, Non è possibile raggruppare i test.

Che cos'è la TestNG?
TestNG è un framework di test di automazione in cui NG sta per "Next Generation". TestNG è ispirato da JUnit che utilizza le annotazioni (@). TestNG supera gli svantaggi di JUnit ed è progettato per realizzare test end-to-end Easy.
utilizzando TestNG, puoi generare un report adeguato e puoi facilmente sapere quanti casi di test sono stati superati, falliti e saltati. È possibile eseguire separatamente i casi di test falliti.
Cos'è Junit?
JUnit è un'unità open source Testing Quadro per JAVA. È utile per Java Sviluppatori per scrivere ed eseguire test ripetibili. Inizialmente Erich Gamma e Kent Beck lo sviluppano. È un'istanza dell'architettura xUnit. Come suggerisce il nome, è utilizzato per Test unitari di una piccola porzione di codice.
Gli sviluppatori che seguono una metodologia basata sui test devono scrivere ed eseguire prima i test unitari e poi qualsiasi codice.
Una volta terminato con il codice, dovresti eseguire tutti i test e dovrebbe passare. Ogni volta che viene aggiunto del codice, è necessario rieseguire tutti i casi di test e assicurarsi che nulla sia danneggiato.
Differenze tra JUnit e TestNG
Entrambi TestNG e JUnit4 sembra simile, tranne una o due caratteristiche. Facciamo un confronto tra i due per decidere rapidamente quale tecnologia è più favorevole per lo Unit Testing. La tabella seguente evidenzia le funzionalità supportate da entrambi:
Annotazioni
Entrambi JUnit e TestNG utilizza le annotazioni e quasi tutte le annotazioni sembrano simili.
TestNG utilizza @BeforeMethod ,@AfterMethod simile a @Before ,@After in JUnit4.
Entrambi TestNG e Junit4 usa @Test(timeout = 1000) per il timeout. Controlla la tabella sottostante per maggiori dettagli-
SNA | Descriptione | TestNG | JUnit 4 |
---|---|---|---|
1 | Annotazione di prova | @Test | @Test |
2 | Viene eseguito prima che il primo metodo di test venga richiamato nella classe corrente | @Prima della lezione | @Prima della lezione |
3 | Esegue dopo tutti i metodi di test nella classe corrente | @Dopo la lezione | @Dopo la lezione |
4 | Viene eseguito prima di ciascun metodo di prova | @PrimaMetodo | @Prima |
5 | Viene eseguito dopo ciascun metodo di prova | @DopoMetodo | @Dopo |
6 | annotazione per ignorare un test | @Test(abilita=falso) | @ignorare |
7 | annotazione per eccezione | @Test(expectedExceptions = ArithmeticException.class) | @Test(previsto = ArithmeticException.class) |
8 | timeout | @Test(timeout = 1000) | @Test(timeout = 1000) |
9 | Viene eseguito prima di tutti i test nella suite | @Prima Suite | n/a |
10 | Viene eseguito dopo tutti i test nella suite | @Aftersuite | n/a |
11 | Viene eseguito prima dell'esecuzione di un test | @Prima del test | n/a |
12 | Viene eseguito dopo l'esecuzione di un test | @DopoTest | n/a |
13 | Viene eseguito prima che venga richiamato il primo metodo di test che appartiene a uno qualsiasi di questi gruppi | @PrimaGruppi | n/a |
14 | eseguire dopo l'ultimo metodo di test che appartiene a uno qualsiasi dei gruppi qui | @DopoGruppi | n/a |
Prova della suite
Le suite vengono utilizzate per eseguire più test insieme. Le suite possono essere create utilizzando entrambi TestNG e JUnit4. Tuttavia, le suite sono più potenti TestNG poiché utilizza un metodo molto diverso per l'esecuzione dei test. Capiamolo utilizzando lo snippet di codice come indicato di seguito:
utilizzando JUnit4
La classe seguente descrive l'uso della suite mentre si lavora 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 }
utilizzando TestNG
TestNG utilizza xml per raggruppare tutti i test in un unico posto. Di seguito xml descrive l'uso della suite mentre si lavora 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>
Ignora prova
Usandoli entrambi possiamo saltare un test. Vediamolo usando l'esempio di codice come indicato di seguito:
utilizzando JUnit4
Lo snippet di codice seguente descrive l'uso dell'annotazione @ignore mentre si lavora con JUnit4:
@Ignore public void method1() { System.out.println("Using @Ignore , this execution is ignored"); }
utilizzando TestNG
Lo snippet di codice seguente descrive l'uso dell'annotazione @Test(enabled=false) mentre si lavora con TestNG:
@Test(enabled=false) public void TestWithException() { System.out.println("Method should be ignored as it's not ready yet"); }
Prova di eccezione
Il test delle eccezioni è disponibile sia in TestNG e JUnit4. Viene utilizzato per verificare, quale eccezione viene generata dal test?
utilizzando JUnit4
Lo snippet di codice riportato di seguito descrive l'uso del test delle eccezioni durante l'utilizzo JUnit4:
@Test(expected = ArithmeticException.class) public void divideByZero() { Int i = 1/0; }
utilizzando TestNG
Lo snippet di codice riportato di seguito descrive l'uso del test delle eccezioni durante l'utilizzo TestNG:
@Test(expectedExceptions = ArithmeticException.class) public void divideByZero() { Int i = 1/0; }
timeout
Questa funzionalità è implementata sia in TestNg che JUnit4.Timeout viene utilizzato per terminare un test che richiede più tempo del tempo specificato (in millisecondi).
utilizzando JUnit4
Lo snippet di codice riportato di seguito descrive l'uso del test di timeout mentre si lavora con JUnit4:
@Test(timeout = 1000) public void method1() { while (true); }
utilizzando TestNG
Lo snippet di codice riportato di seguito descrive l'uso del test di timeout mentre si lavora con TestNG:
@Test(timeOut = 1000) public void method1() { while (true); }
Test parametrizzato
JUnit fornisce un approccio più semplice e leggibile al test noto come test parametrizzato. Entrambi TestNG e JUnit supporta il test parametrizzato ma differisce nel modo in cui definisce il valore del parametro. Vediamolo uno per uno.
utilizzando JUnit4
Le annotazioni "@RunWith" e "@Parameter" vengono utilizzate per fornire il valore del parametro per il test unitario. L'annotazione @Parameters deve restituire List[] .Questo parametro verrà passato al costruttore della classe come argomento.
@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); } }
utilizzando TestNG
In TestNG, file XML o "@DataProvider" viene utilizzato per fornire un parametro per il test.
Qui l'annotazione @Parameters dichiarata nel metodo richiede un parametro per il test. I dati utilizzati come parametro forniranno in TestNGfile di configurazione XML. In questo modo, possiamo riutilizzarne uno singolo Test Case con set di dati diversi e possiamo ottenere risultati diversi.
public class Test1 { @Test @Parameters(value="number") public void parameterTest(int number) { System.out.println("Parameterized Number is : " + number); } }
Vedi di seguito il file xml da utilizzare per la classe precedente:
<!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>
Sommario
Vedemmo JUnit4 e TestNG confronto nei dettagli. Abbiamo anche visto che entrambi sono simili, eccetto il test parametrico e il test di dipendenza. In breve, possiamo dire che, in base alla flessibilità e ai requisiti, possiamo scegliere uno qualsiasi di essi per il test unitario.