TestNG - TestNG

TestNG
Développeur(s) Cédric Beust, l'équipe TestNG
Version stable
7.3.0 / 19 septembre 2020 ; il y a 11 mois ( 2020-09-19 )
Dépôt
Écrit en Java
Système opérateur Multiplateforme
Taper Outil de test unitaire
Licence Licence Apache 2.0
Site Internet testng .org

TestNG est un framework de test pour le langage de programmation Java créé par Cédric Beust et inspiré de JUnit et NUnit . L'objectif de conception de TestNG est de couvrir un plus large éventail de catégories de tests : unitaire, fonctionnel, de bout en bout, d'intégration, etc., avec des fonctionnalités plus puissantes et plus faciles à utiliser.

Caractéristiques

Les principales fonctionnalités de TestNG incluent :

  1. Prise en charge des annotations.
  2. Prise en charge des tests pilotés par les données/paramétrés (avec @DataProvideret/ou configuration XML).
  3. Prise en charge de plusieurs instances de la même classe de test (avec @Factory)
  4. Modèle d'exécution flexible. TestNG peut être exécuté soit par Ant via build.xml (avec ou sans suite de tests définie), soit par un plugin IDE avec des résultats visuels. Il n'y a pas de TestSuiteclasse, tandis que les suites de tests, les groupes et les tests sélectionnés pour être exécutés sont définis et configurés par des fichiers XML.
  5. Tests simultanés : exécutez des tests dans des pools de threads arbitrairement volumineux avec diverses politiques disponibles (toutes les méthodes dans leur propre thread, un thread par classe de test, etc.) et testez si le code est multithread safe.
  6. Intègre BeanShell pour plus de flexibilité.
  7. Fonctions JDK par défaut pour l'exécution et la journalisation (pas de dépendances).
  8. Méthodes dépendantes pour le test du serveur d'applications.
  9. Tests distribués : permet la distribution des tests sur les machines esclaves.


Fournisseur de données

Un fournisseur de données dans TestNG est une méthode dans une classe de test, qui fournit un tableau de valeurs réelles variées aux méthodes de test dépendantes.

Exemple:

	//This method will provide data to any test method that declares that its Data Provider is named "provider1". 
	@DataProvider(name = "provider1")
	public Object[][] createData1() {
		return new Object[][] { 
			{ "Cedric", new Integer(36) },
			{ "Anne", new Integer(37) }
		};
	}

	// This test method declares that its data should be supplied by the Data Provider named "provider1".
	@Test(dataProvider = "provider1")
	public void verifyData1(String n1, Integer n2) {
		System.out.println(n1 + " " + n2);
	}

	// A data provider which returns an iterator of parameter arrays.
	@DataProvider(name = "provider2")
	public Iterator<Object[]> createData() {
		return new MyIterator(...);
	}	

	// A data provider with an argument of the type java.lang.reflect.Method.
	// It is particularly useful when several test methods use the same 
	// provider and you want it to return different values depending on 
	// which test method it is serving. 
	@DataProvider(name = "provider3")
	public Object[][] createData(Method m) {
		System.out.println(m.getName()); 
		return new Object[][] { new Object[] { "Cedric" } };
	}

Le type renvoyé d'un fournisseur de données peut être l'un des deux types suivants :

  • Un tableau de tableau d'objets ( Object[][]) où la taille de la première dimension est le nombre de fois que la méthode de test sera invoquée et la taille de la seconde dimension contient un tableau d'objets qui doit être compatible avec les types de paramètres de la méthode de test.
  • Un Iterator<Object[]>. La seule différence avec Object[][]est qu'un itérateur vous permet de créer vos données de test paresseusement. TestNG invoquera l'itérateur puis la méthode de test avec les paramètres renvoyés par cet itérateur un par un. Ceci est particulièrement utile si vous avez beaucoup de jeux de paramètres à transmettre à la méthode et que vous ne voulez pas tous les créer à l'avance.

Prise en charge de l'outil

TestNG est pris en charge, prêt à l'emploi ou via des plug-ins, par chacun des trois principaux IDE Java - Eclipse , IntelliJ IDEA et NetBeans . Il est également livré avec une tâche personnalisée pour Apache Ant et est pris en charge par le système de construction Maven . Le serveur d' intégration continue Hudson prend en charge TestNG et est capable de suivre et de tracer les résultats des tests au fil du temps. La plupart des outils de couverture de code Java , tels que Cobertura , fonctionnent de manière transparente avec TestNG.

Remarque : la prise en charge de TestNG pour Eclipse est uniquement intégrée dans Eclipse Marketplace pour les versions Eclipse jusqu'au 2018-09 (4.9). Pour les versions ultérieures d'Eclipse, TestNG doit être installé manuellement conformément aux instructions du site TestNG.

Rapports

TestNG génère des rapports de test aux formats HTML et XML. La sortie XML peut être transformée par la tâche Ant JUnitReport pour générer des rapports similaires à ceux obtenus lors de l'utilisation de JUnit. Depuis la version 4.6, TestNG fournit également une API de rapporteur qui permet d'utiliser des générateurs de rapports tiers, tels que ReportNG, PDFngreport et TestNG-XSLT.

Comparaison avec JUnit

TestNG a une rivalité de longue date avec un autre outil de test JUnit . Chaque cadre a des différences et des avantages respectifs. Les discussions sur Stack Overflow reflètent cette controverse.

Annotations

Dans JUnit 5, les méthodes @BeforeAll et @AfterAll doivent être déclarées comme statiques dans la plupart des cas. TestNG n'a pas cette contrainte.

TestNG inclut quatre paires d'annotations de configuration/démontage supplémentaires pour la suite de tests et les groupes : @BeforeSuite, @AfterSuite, @BeforeTest, @AfterTest, @BeforeGroup et @AfterGroup, @BeforeMethod et @AfterMethod. TestNG fournit également un support pour automatiser le test d'une application à l'aide de sélénium.

Tests paramétrés

Les tests paramétrés sont implémentés dans les deux outils, mais de manière assez différente.

TestNG a deux manières de fournir des valeurs de paramètres variables à une méthode de test : en définissant le testng.xml et en définissant une méthode @DataProvider .

Dans JUnit 5, l' annotation @ParameterizedTest permet des tests paramétrés. Cette annotation est combinée avec une autre annotation déclarant la source des arguments paramétrés, comme @ValueSource ou @EnumSource . L'utilisation de @ArgumentsSource permet à l'utilisateur d'implémenter un fichierArgumentsProvider . Dans JUnit 4, @RunWith et @Parameters sont utilisés pour faciliter les tests paramétrés, où la méthode @Parameters doit renvoyer un List[]avec les valeurs paramétrées, qui seront introduites dans le constructeur de la classe de test.

Conclusion

Différents utilisateurs préfèrent souvent certaines fonctionnalités d'un framework ou d'un autre. JUnit est plus populaire et souvent livré par défaut avec les IDE grand public. TestNG est connu pour ses options de configuration supplémentaires et sa capacité à différents types de tests. Lequel le plus approprié dépend du contexte d'utilisation et des exigences.

Voir également

Les références


Liens externes