Sia Testng che Junit sono framework di test utilizzati per gli unit test. TestNG è simile a JUnit. Vengono aggiunte poche altre funzionalità che rendono TestNG più potente di JUnit.
Questo tutorial si concentra principalmente sull'analisi delle funzionalità di JUnit e TestNG. Aiuta gli sviluppatori a decidere quale framework utilizzare per gli unit test. Analizziamo prima le somiglianze tra TestNG e JUnit4.
TestNG è un framework di test ispirato a JUnit e NUnit.
Ecco la tabella che mostra le funzionalità supportate da JUnit e TestNG.
Confronto delle caratteristiche di JUnit4 e TestNG
Sia TestNG che JUnit4 sono simili, tranne una o due funzionalità. Facciamo un confronto tra i due per decidere rapidamente quale tecnologia è più favorevole per gli Unit Testing. La tabella sottostante evidenzia le funzionalità supportate da entrambi:
Annotazioni
Sia JUnit che TestNG utilizzano annotazioni e quasi tutte le annotazioni sono simili.
TestNG utilizza @BeforeMethod, @ AfterMethod simile a @Before, @ After in JUnit4.
Sia TestNG che Junit4 usano @Test (timeout = 1000) per il timeout. Controlla la tabella qui sotto per maggiori dettagli-
SN | 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 | Viene eseguito dopo tutti i metodi di test nella classe corrente | @Dopo la lezione | @Dopo la lezione |
4 | Viene eseguito prima di ogni metodo di prova | @BeforeMethod | @Prima |
5 | Viene eseguito dopo ogni metodo di prova | @AfterMethod | @Dopo |
6 | annotazione per ignorare un test | @Test (enable = false) | @ignorare |
7 | annotazione per eccezione | @Test (expectedExceptions = ArithmeticException.class) | @Test (previsto = ArithmeticException.class) |
8 | tempo scaduto | @Test (timeout = 1000) | @Test (timeout = 1000) |
9 | Viene eseguito prima di tutti i test nella suite | @BeforeSuite | n / A |
10 | Viene eseguito dopo tutti i test nella suite | @AfterSuite | n / A |
11 | Viene eseguito prima che venga eseguito un test | @BeforeTest | n / A |
12 | Viene eseguito dopo l'esecuzione di un test | @AfterTest | n / A |
13 | Viene eseguito prima che venga richiamato il primo metodo di test che appartiene a uno di questi gruppi | @BeforeGroups | n / A |
14 | eseguire dopo l'ultimo metodo di test che appartiene a uno qualsiasi dei gruppi qui | @AfterGroups | n / A |
Suite Test
Le suite vengono utilizzate per eseguire più test insieme. Le suite possono essere create utilizzando sia TestNG che JUnit4. Tuttavia, le suite sono più potenti in TestNG poiché utilizza metodi molto diversi per l'esecuzione dei test. Comprendiamolo usando lo snippet di codice come indicato di seguito:
Utilizzando JUnit4
La classe seguente descrive l'uso della suite mentre si lavora con JUnit4:
pacchetto guru99.junit;import org.junit.runner.RunWith;import org.junit.runners.Suite;@RunWith (Suite.class)@ Suite.SuiteClasses ({SuiteTest1.class,SuiteTest2.class,})public class JunitTest {// Questa classe rimane vuota, viene utilizzata solo come contenitore per le annotazioni precedenti}
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 con TestNG:
Ignora test
Usando entrambi possiamo saltare un test Vediamolo usando un esempio di codice come mostrato di seguito:
Utilizzando JUnit4
Di seguito lo snippet di codice descrive l'uso dell'annotazione @ignore mentre si lavora con JUnit4:
@Ignorarepublic void method1 (){System.out.println ("Utilizzando @Ignore, questa esecuzione viene ignorata");}
Utilizzando TestNG
Di seguito lo snippet di codice descrive l'uso dell'annotazione @Test (enabled = false) mentre si lavora con TestNG:
@Test (abilitato = falso)public void TestWithException (){System.out.println ("Il metodo dovrebbe essere ignorato perché non è ancora pronto");}
Test di eccezione
Il test delle eccezioni è disponibile sia in TestNG che in JUnit4. Viene utilizzato per verificare quale eccezione viene generata dal test?
Utilizzando JUnit4
Di seguito lo snippet di codice descrive l'uso del test di eccezione mentre si lavora con JUnit4:
@Test (previsto = ArithmeticException.class)public void divideByZero (){Int i = 1/0;}
Utilizzando TestNG
Di seguito lo snippet di codice descrive l'uso del test di eccezione mentre si lavora con TestNG:
@Test (expectedExceptions = ArithmeticException.class)public void divideByZero (){Int i = 1/0;}
Tempo scaduto
Questa funzione è implementata sia in TestNg che in JUnit4.Timeout viene utilizzato per terminare un test che richiede più tempo del tempo specificato (in millisecondi).
Utilizzando JUnit4
Di seguito lo snippet di codice descrive l'uso del test di timeout mentre si lavora con JUnit4:
@Test (timeout = 1000)public void method1 (){while (vero);}
Utilizzando TestNG
Di seguito lo snippet di codice descrive l'uso del test di timeout mentre si lavora con TestNG:
@Test (timeOut = 1000)public void method1 (){while (vero);}
Test parametrizzato
JUnit fornisce un approccio più semplice e leggibile al test noto come test parametrizzato. Sia TestNG che JUnit supportano il test parametrizzato ma differiscono nel modo in cui definiscono il valore del parametro. Vediamolo uno per uno.
Utilizzando JUnit4
Le annotazioni "@RunWith" e "@Parameter" vengono utilizzate per fornire il valore del parametro per lo unit test. L'annotazione @Parameters deve restituire List []. Questo parametro verrà passato al costruttore della classe come argomento.
@RunWith (valore = Parameterized.class)public class JunitTest {numero privateint;pubblico JunitTest6 (numero int){this.number = numero;}@Parameterspublic static Collection
Utilizzando TestNG
In TestNG, il file XML o "@DataProvider" viene utilizzato per fornire un parametro per il test.
Qui l'annotazione @Parameters dichiarata nel metodo, necessita di un parametro per il test. I dati utilizzati come parametro verranno forniti nei file di configurazione XML di TestNG. In questo modo, possiamo riutilizzare un singolo caso di test con diversi set di dati e possiamo ottenere risultati diversi.
public class Test1 {@Test@Parameters (value = "number")public void parameterTest (int numero){System.out.println ("Il numero parametrizzato è: + numero);}}
Vedi sotto il file xml da utilizzare per la classe sopra:
Sommario :
Abbiamo visto il confronto tra JUnit4 e TestNG in dettaglio. Abbiamo anche visto che entrambi sono simili tranne il test parametrizzato e il test delle dipendenze. In breve, possiamo dire che in base alla flessibilità e ai requisiti possiamo sceglierne uno qualsiasi per gli unit test.
- Il prossimo