TestNG Vs JUnit: quelle est la différence?

Table des matières:

Anonim

Testng et Junit sont tous deux un framework de test utilisé pour les tests unitaires. TestNG est similaire à JUnit. Peu de fonctionnalités supplémentaires lui sont ajoutées, ce qui rend TestNG plus puissant que JUnit.

Ce tutoriel est principalement axé sur l'analyse des fonctionnalités de JUnit et TestNG. Il aide les développeurs à décider quel cadre doit être utilisé pour les tests unitaires. Analysons d'abord les similitudes entre TestNG et JUnit4.

TestNG est un framework de test inspiré de JUnit et NUnit.

Voici le tableau qui montre les fonctionnalités prises en charge par JUnit et TestNG.

Comparaison des fonctionnalités JUnit4 et TestNG

TestNG et JUnit4 se ressemblent tous les deux, sauf une ou deux fonctionnalités. Faisons une comparaison entre les deux pour décider rapidement quelle technologie est la plus favorable pour les tests unitaires. Le tableau ci-dessous met en évidence les fonctionnalités prises en charge par les deux:

Annotations

JUnit et TestNG utilisent des annotations et presque toutes les annotations se ressemblent.

TestNG utilise @BeforeMethod, @ AfterMethod similaire à @Before, @ After dans JUnit4.

TestNG et Junit4 utilisent tous les deux @Test (timeout = 1000) pour timeout. Consultez le tableau ci-dessous pour plus de détails.

SN Description TestNG JUnit 4
1 Annotation de test @Test @Test
2 S'exécute avant que la première méthode de test ne soit appelée dans la classe actuelle @Avant les cours @Avant les cours
3 S'exécute après toutes les méthodes de test de la classe actuelle @Après les cours @Après les cours
4 S'exécute avant chaque méthode de test @BeforeMethod @Avant que
5 S'exécute après chaque méthode de test @AfterMethod @Après
6 annotation pour ignorer un test @Test (activer = faux) @ignorer
7 annotation pour exception @Test (expectedExceptions = ArithmeticException.class) @Test (attendu = ArithmeticException.class)
8 temps libre @Test (délai d'expiration = 1000) @Test (délai d'expiration = 1000)
9 S'exécute avant tous les tests de la suite @BeforeSuite n / A
dix S'exécute après tous les tests de la suite @AfterSuite n / A
11 S'exécute avant l'exécution d'un test @BeforeTest n / A
12 S'exécute après l'exécution d'un test @AfterTest n / A
13 S'exécute avant que la première méthode de test appartenant à l'un de ces groupes ne soit appelée @BeforeGroups n / A
14 exécuter après la dernière méthode de test qui appartient à l'un des groupes ici @AfterGroups n / A

Test de la suite

Les suites sont utilisées pour exécuter plusieurs tests ensemble. Les suites peuvent être créées en utilisant à la fois TestNG et JUnit4. Cependant, les suites sont plus puissantes dans TestNG car elles utilisent une méthode très différente pour l'exécution des tests. Comprenons-le en utilisant un extrait de code comme indiqué ci-dessous:

Utilisation de JUnit4

La classe ci-dessous décrit l'utilisation de la suite tout en travaillant avec JUnit4:

package guru99.junit;import org.junit.runner.RunWith;import org.junit.runners.Suite;@RunWith (Suite.class)@ Suite.SuiteClasses ({SuiteTest1.class,SuiteTest2.class,})classe publique JunitTest {// Cette classe reste vide, elle n'est utilisée que comme support pour les annotations ci-dessus}

Utilisation de TestNG

TestNG utilise xml pour regrouper tous les tests en un seul endroit. Ci-dessous, xml décrit l'utilisation de la suite tout en travaillant avec TestNG:

Ignorer le test

En utilisant les deux, nous pouvons ignorer un test.Voyons le voir en utilisant l'exemple de code ci-dessous:

Utilisation de JUnit4

L'extrait de code ci-dessous décrit l'utilisation de l'annotation @ignore lors de l'utilisation de JUnit4:

@Ignorerpublic void method1 (){System.out.println ("En utilisant @Ignore, cette exécution est ignorée");}

Utilisation de TestNG

L'extrait de code ci-dessous décrit l'utilisation de l'annotation @Test (enabled = false) tout en travaillant avec TestNG:

@Test (activé = faux)public void TestWithException (){System.out.println ("La méthode doit être ignorée car elle n'est pas encore prête");}

Test d'exception

Les tests d'exception sont disponibles à la fois dans TestNG et JUnit4. Il est utilisé pour vérifier, quelle exception est levée du test?

Utilisation de JUnit4

L'extrait de code ci-dessous décrit l'utilisation du test d'exception lors de l'utilisation de JUnit4:

@Test (attendu = ArithmeticException.class)public void divideByZero (){Int i = 1/0;}

Utilisation de TestNG

L'extrait de code ci-dessous décrit l'utilisation du test d'exception tout en travaillant avec TestNG:

@Test (expectedExceptions = ArithmeticException.class)public void divideByZero (){Int i = 1/0;}

Temps libre

Cette fonctionnalité est implémentée à la fois dans TestNg et JUnit4.Timeout est utilisé pour terminer un test qui prend plus de temps que spécifié (en millisecondes).

Utilisation de JUnit4

L'extrait de code ci-dessous décrit l'utilisation du test de délai d'expiration lors de l'utilisation de JUnit4:

@Test (délai d'expiration = 1000)public void method1 (){while (vrai);}

Utilisation de TestNG

L'extrait de code ci-dessous décrit l'utilisation du test de délai d'expiration lors de l'utilisation de TestNG:

@Test (timeOut = 1000)public void method1 (){while (vrai);}

Test paramétré

JUnit fournit une approche de test plus simple et lisible, connue sous le nom de test paramétré. TestNG et JUnit prennent en charge le test paramétré mais diffèrent dans la manière dont ils définissent la valeur du paramètre. Voyons celui-ci un par un.

Utilisation de JUnit4

Les annotations "@RunWith" et "@Parameter" sont utilisées pour fournir une valeur de paramètre pour le test unitaire. L'annotation @Parameters doit renvoyer List []. Ce paramètre sera passé dans le constructeur de classe en tant qu'argument.

@RunWith (valeur = Parameterized.class)classe publique JunitTest {numéro privateint;public JunitTest6 (nombre entier){this.number = nombre;}@Paramètrespublic static Collection  data (){Object [] [] data = nouvel objet [] [] {{1}, {2}, {3}, {4}};returnArrays.asList (données);}@Testpublic void parameterTest (){System.out.println ("Le numéro paramétré est: + numéro);}}

Utilisation de TestNG

Dans TestNG, un fichier XML ou "@DataProvider" est utilisé pour fournir un paramètre de test.

Ici, l'annotation @Parameters déclarée dans la méthode nécessite un paramètre pour le test. Les données utilisées comme paramètre seront fournies dans les fichiers de configuration XML de TestNG. En faisant cela, nous pouvons réutiliser un seul scénario de test avec différents ensembles de données, et nous pouvons obtenir des résultats différents.

public class Test1 {@Test@Parameters (valeur = "nombre")public void parameterTest (nombre entier){System.out.println ("Le numéro paramétré est: + numéro);}}

Voir ci-dessous le fichier xml à utiliser pour la classe ci-dessus:


Résumé :

Nous avons vu la comparaison JUnit4 et TestNG en détail. Nous avons également vu que les deux sont similaires sauf le test paramétré et le test de dépendance. En bref, nous pouvons dire qu'en fonction de la flexibilité et des exigences, nous pouvons choisir l'un d'entre eux pour les tests unitaires.