Comment assurez-vous TestNG pistes de méthodes sur les classes de test dans la succession au lieu de entrelacés?

La situation et le problème

J'ai plusieurs classes de test, chacun avec plusieurs méthodes de test. Tous les tests utilisent la même base de données de test dans le fond. Chaque classe de test initialise son contenu de base de données, puis les tests de choses dans plusieurs méthodes d'essai.

Quand je lance chaque test individuellement, ils passent tous. Mais quand je lance plusieurs tests en même temps (soit à l'aide de maven ou mon IDE, Ide), les méthodes de différentes classes de test sont exécutés entrelacés, par exemple. l'initialisation de la base de la seconde classe s'exécute après le premier de la classe a commencé, mais avant toutes les méthodes d'essai de première classe ont été exécutés afin que ces méthodes échouent (car la base de données contient déjà deuxième de la classe de données).

Certaines choses que j'ai essayé, et un peu plus de détails

La solution la plus simple serait d'obliger les TestNG coureur à courir classes de la succession (c'est à dire. attendez que toutes les méthodes de test d'une classe de test avant la fin de l'exécution de tester des méthodes d'une autre classe). Cela peut-il être fait?

Je peux probablement le faire en spécifiant chaque classe de test dans mon bureau, mais je ne veux pas faire ce que j'aurais à ajouter quelque chose à la suite à chaque fois que j'ajoute une classe de test qui est maladroit et sujette à erreur.

Suffit de demander à TestNG pour ne pas paralléliser quoi que ce soit (par exemple. réglage du nombre de threads pour 1 ou la désactivation de fonctionnement en parallèle) n'aide pas ici puisque les méthodes obtenez toujours courir dans le mauvais ordre (mais pas simultanément).

Une option serait d'utiliser une base de données différente pour chaque classe de test, mais je ne vois pas de moyen simple de le faire (en utilisant JPA, et Guice).

Je ne suis pas actuellement à l'aide de DBUnit, Unitils etc.; Je ne connaissais pas ces outils très bien, mais j'ai l'impression de ne pas résoudre mes problèmes.

Je suis en utilisant JPA pour initialiser la base de données dans chaque classe de test (c'est à dire. créer des objets de l'entité et presist eux).

  • Je pense qu'au moins une partie du problème est que plusieurs classes ont des méthodes appelées testPrepareDb et d'autres méthodes annotées @Test(dependsOnMethods = "testPrepareDb"). Lorsque plusieurs de ces classes sont exécutées dans le cadre d'un test, il semble que tous les dépendants méthodes sont exécutées qu'après que tous les testPrepareDb méthodes ont été exécutés, ce qui est faux dans mon cas. En gros, j'avais juste envie de mes classes de test pour traduire automatiquement pour séparer TestNG tests sans avoir à indiquer explicitement comme <test> dans la suite de l'xml.
InformationsquelleAutor mazi | 2013-06-24