TestNG vs JUnit - Differenza tra loro
Differenza chiave tra TestNG and 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, Gruppoping Non รจ possibile eseguire i test insieme.

Cosa รจ 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 Collaudo 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 and TestNG
Entrambi i progetti editoriali di TestNG and 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 i progetti editoriali di JUnit and TestNG utilizza le annotazioni e quasi tutte le annotazioni sembrano simili.
TestNG utilizza @BeforeMethod ,@AfterMethod simile a @Before ,@After in JUnit4.
Entrambi i progetti editoriali di TestNG e Junit4 usa @Test(timeout = 1000) per il timeout. Controlla la tabella sottostante per maggiori dettagli-
| SNA | Descrizione | 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 and 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 and 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 and 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>
Sintesi
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.

