NUnit Tester L'Exécution De L'Ordre
Par défaut nunit les tests s'exécutent dans l'ordre alphabétique. Personne ne sait de toute façon de définir l'ordre d'exécution? Un attribut existe pour cela?
- Pourquoi voudriez-vous faire cela? Il semble que vous avez une dépendance sur l'ordre d'exécution, ce qui est une mauvaise chose. Vous avez besoin de reconsidérer pourquoi vous voulez cette. Les tests unitaires doivent s'exécuter dans l'isolement et d'être totalement indépendant des autres. Il semble que vous créez des candidats pour le test d'odeur Erratique Tests.
- Cela ressemble à un doublon, mais vous pouvez voir ma réponse à cette here
- devrait != doit. Et ce n'est pas vraiment de l'événement doit, parce qu'en fait, presque tous les tests d'intégration sont exécutées dans un ordre - vous demander de l'équipe QA si ils aléatoirement l'ordre de leurs tests.
- J'ai actuellement quelques tests dont le but semble d'importance, même si il ne devrait pas. Personnellement, j'aimerais un moyen de rendre aléatoire l'ordre de contrôle spécifiquement pour m'aider à faire en sorte que mes tests ne SONT PAS en quelque sorte dépendant de l'ordre. Bien sûr, ce que j'aimerais VRAIMENT serait un lanceur de test pour exécuter tous mes essais dans un ordre aléatoire jusqu'à ce qu'il détecte un problème, ou je dis stop. Si j'ai couru, que du jour au lendemain, tout était encore vert dans la matinée, alors je pourrais être convaincu que j'ai éliminé le dernier des effets secondaires indésirables.
- cette question serait plus pertinents si la question a été mise à jour pour préciser que nous parlons de tests d'intégration ici... Nous connaissons tous les règles sur les tests unitaires, au moins si vous avez lu XUnit des modèles de test et de suivi de l'Oncle Bob, etc.. faire.. mais des frameworks tels que NUnit sont également très utiles pour obtenir des tests d'intégration et de courir très vite.. et vous ne voulez certainement pas de ceux qui doivent être aléatoire, surtout quand un cher de la base de données de configuration est impliqué..
Vous devez vous connecter pour publier un commentaire.
Vos tests unitaires doivent être en mesure de fonctionner de manière indépendante et autonome. S'ils satisfont à ce critère, l'ordre n'a pas d'importance.
Il y a des occasions, cependant, lorsque vous voulez exécuter certains tests en premier. Un exemple typique est l'Intégration Continue de la situation où certains tests sont plus longues que d'autres. Nous utilisons l'attribut de catégorie, de sorte que nous pouvons exécuter les tests qui utilisent les moqueries à l'avance les tests qui utilisent la base de données.
c'est à dire mettre ceci au début de votre tests rapides
Où vous avez tests qui dépendent de certaines conditions environnementales, envisager la TestFixtureSetUp et TestFixtureTearDown des attributs, qui vous permettent de marquer les méthodes qui doivent être exécutées avant et après vos tests.
Je veux juste souligner que, bien que la plupart des intervenants suppose que ces ont été les tests unitaires, la question ne précise pas qui ils étaient.
nUnit est un excellent outil qui peut être utilisé pour une variété de situations de test. Je peux voir de bonnes raisons pour vouloir test de contrôle de la commande.
Dans ces situations que j'ai eu à recourir à intégrer un ordre d'exécution dans le nom de test. Il serait bon d'être en mesure de spécifier l'ordre d'exécution à l'aide d'un attribut.
001_first_test
002_second_test
et ainsi de suite?NUnit 3.2.0 ajouté une
OrderAttribute
, voir:https://github.com/nunit/docs/wiki/Order-Attribute
Exemple:
Vouloir les tests à exécuter dans un ordre précis ne veut pas dire que les tests sont dépendantes les unes des autres - je suis en train de travailler sur un TDD projet pour le moment, et d'être un bon TDDer j'ai raillé/écrasa de tout, mais il serait plus lisible si je pouvais spécifier l'ordre qui les résultats des tests sont affiche - par thème et non par ordre alphabétique. Jusqu'à présent, la seule chose que je peux penser à est de préfixer a_ b_ c_ à des classes pour les classes, les espaces de noms et les méthodes. (Pas sympa) je pense que [TestOrderAttribute] attribut serait sympa - pas strictement suivie par le cadre, mais un soupçon de sorte que nous pouvons atteindre cet
Indépendamment de si oui ou non les Tests sont de l'ordre dépendant... certains d'entre nous veulent tout contrôler, d'une manière ordonnée.
Les tests unitaires sont généralement créés par ordre de complexité. Alors, pourquoi ne devraient-ils pas également être exécutées dans un ordre de complexité, ou l'ordre dans lequel ils ont été créés?
Personnellement, j'aime voir les tests s'exécutent dans l'ordre dans lequel je les ai créées. En mode TDD, chaque test est naturellement va être plus complexe, et de prendre plus de temps à s'exécuter. Je verrais plutôt la plus simple de tester l'échec en premier car il sera un meilleur indicateur quant à la cause de l'échec.
Mais, je vois aussi l'avantage de les exécuter dans un ordre aléatoire, surtout si vous voulez tester vos tests n'ont pas de dépendances sur d'autres tests. Que diriez-ajout d'une option pour les coureurs de l'épreuve de "l'Exécution des Tests au Hasard Jusqu'à l'arrêt"?
Je suis en train de tester avec du Sélénium sur une assez complexe de site web et l'ensemble de la suite de tests peuvent durer plus d'une demi-heure, et je ne suis pas près à couvrir l'ensemble de l'application. Si je dois veiller à ce que tous les formulaires sont remplis correctement pour chaque test, ce qui ajoute beaucoup de temps, et pas seulement une petite quantité de temps, à l'ensemble de test. Si il y a trop de frais généraux pour lancer les tests, les gens ne fonctionnent pas aussi souvent qu'ils le devraient.
Donc, je les ai mis dans l'ordre et dépendent de précédents tests d'avoir des zones de texte et dûment remplie. J'utilise Affirmer.Ignore() lors de la pré-conditions ne sont pas valides, mais j'ai besoin de les avoir en cours d'exécution.
J'aime vraiment la réponse précédente.
J'ai changé un peu pour être en mesure d'utiliser un attribut pour définir l'ordre gamme:
OrderedTest
n'est plus pris en charge dans NUnit 3.Je sais que c'est un relativement vieux post, mais voici une autre façon de garder votre test dans l'ordre, SANS faire le test noms maladroit. À l'aide de la TestCaseSource attribut et ayant pour objet de vous passer en avoir un délégué (Action), vous pouvez tout à fait non seulement le contrôle de l'ordre, mais aussi le nom du test ce que c'est.
Cela fonctionne parce que, selon la documentation, les éléments de la collection retourné à partir de la source de test s'exécute toujours dans l'ordre de la liste.
Voici une démo à partir d'une présentation, je suis en train de faire demain:
TestCaseSource
comme un moyen d'exécuter commandé des tests est un coup de génie. Bien fait. J'ai pris cette approche avec celle ci-dessous et ajouté quelques modifications pour la rendre plus facile à utiliser. Voir les liens dans ma réponse pour plus d'info, mais l'idée sous-jacente est à partir de cette super réponse!TestCaseSource
doit être statique, ce qui empêche l'utilisation d'un motif. La poisse.TestCaseSource
doit être un objet statique dans NUnit 3, ou les tests ne seront pas exécutés. Et vous ne pouvez pas créer des objets dynamiques à l'intérieur d'un objet statique. C'est pourquoi il ne fonctionne pas dans la v. 3.static
. Quand je fais ça, tout fonctionne bien.Je suis en train de travailler avec Selenium WebDriver de bout en bout de l'INTERFACE utilisateur des cas de test écrit en C#, qui sont exécutées à l'aide NUnit cadre. (Pas d'unité d'affaires)
Ces tests de l'INTERFACE utilisateur certainement dépendre de l'ordre d'exécution, comme d'autres test doit ajouter certaines données comme une condition préalable. (Il n'est pas possible de faire les étapes dans tous les tests)
Maintenant, après l'ajout de la 10e cas de test, je vois NUnit veut courir dans cet ordre:
Test_1
Test_10
Test_2
Test_3
..
Donc je suppose que j'ai trop alphabetisize le test des noms de cas pour l'instant, mais il serait bon d'avoir cette petite fonctionnalité de contrôle de l'exécution de l'ordre ajouté à NUnit.
Généralement de Test Unitaire doit être indépendant, mais si vous devez, ensuite, vous pouvez nommer vos méthodes dans l'ordre alphabétique ex:
ou vous pouvez le faire..
a_
b_
t1_
,t2_
à la place ou en s'appuyant sur facile de rater des caractères de finIl y a de très bonnes raisons d'utiliser un Test mécanisme de traitement des commandes. La plupart de mes propres tests, utiliser de bonnes pratiques telles que l'installation/démontage. D'autres nécessitent d'énormes quantités de données de configuration, qui peut ensuite être utilisé pour tester une gamme de fonctionnalités. Jusqu'à présent, j'ai utilisé les gros tests pour gérer ces (Selenium Webdriver) tests d'intégration. Cependant, je pense que le ci-dessus suggère de poster sur https://github.com/nunit/docs/wiki/Order-Attribute a beaucoup de mérite. Voici un exemple de pourquoi la commande serait extrêmement précieux:
Cette 10 minutes d'attente le temps ralentit la suite de test. Quand vous multipliez similaires de mise en cache retards à travers une multitude de tests, il consomme beaucoup de temps. La commande de tests pourrait permettre de données de configuration à faire un "Test" dès le début de la suite de test, avec des tests en s'appuyant sur le cache de buste exécuté vers la fin de l'essai.
Cette question est vraiment vieux maintenant, mais pour les gens qui peut atteindre cette fin de recherche, j'ai pris les excellentes réponses de user3275462 et PvtVandals /Rico et les a ajoutés à un GitHub avec certains de mes propres mises à jour. J'ai également créé associé à un blog avec quelques informations supplémentaires que vous pouvez regarder pour plus d'infos.
Espère que cela est utile pour vous tous. Aussi, j'ai souvent envie d'utiliser l'attribut de Catégorie pour différencier mes tests d'intégration ou de l'autre de bout en bout de tests à partir de mes tests unitaires. D'autres ont souligné que les tests unitaires ne doivent pas avoir un ordre de dépendance, mais d'autres types de tests souvent, donc, cela donne une belle façon d'exécuter uniquement la catégorie de tests que vous voulez et aussi l'ordre de ceux de bout en bout tests.
Je suis un peu surpris de la NUnit communauté n'a pas trouver quoi que ce soit, je suis donc allé à créer quelque chose de moi-même.
Je suis actuellement développement d'une bibliothèque libre qui vous permet de commander vos tests avec NUnit. Vous pouvez commander des appareils de test et de commande "ordonné spécifications de test" comme.
La bibliothèque offre les fonctionnalités suivantes:
La bibliothèque est en fait inspiré de la façon dont MSTest ne test de la commande auprès de
.orderedtest
fichiers. S'il vous plaît regardez l'exemple ci-dessous.Vous ne devrait pas dépendre de l'ordre dans lequel le framework de test choisit tests pour l'exécution. Les Tests doivent être isolés et indépendants. En ce qu'ils ne devraient pas dépendre des autres test de mise en scène pour eux ou nettoyage après eux. Ils doivent également produire le même résultat indépendamment de l'ordre d'exécution de tests (pour un aperçu de la CUS)
J'ai fait un peu de recherche sur google. Comme d'habitude, certaines personnes ont eu recours à des astuces sournois (au lieu de résoudre le sous-jacent de testabilité/problème de conception de la
Voir Aussi: caractéristiques d'un bon test
Si vous utilisez
[TestCase]
, l'argumentTestName
fournit un nom pour le test.Si non spécifié, le nom est généré en fonction du nom de la méthode et les arguments fournis.
Vous pouvez contrôler l'ordre d'exécution de test comme indiqué ci-dessous:
Ici, j'ai utilisé le nom de la méthode
"ExpressionTest"
suffixe avec un nombre.Vous pouvez utiliser des noms commandé alphabétique
voir Cas De Test D'Attribut
Dans le cas de l'utilisation
TestCaseSource
la clé est deoverride string ToString
méthode, Comment ça fonctionne:Suppose que vous avez des cas de test de la classe
Et une liste de cas de tests:
Maintenant permet de l'utiliser avec la méthode de Test et de voir ce qu'il se passe:
Ce ne sera pas le test dans l'ordre et la sortie sera comme ceci:
Donc, si nous avons ajouté
override string ToString
de notre classe comme:Le résultat va changer et nous obtenons l'ordre et le nom de test comme:
Remarque: