8
votes

Dans Ruby, comment contrôler l'ordre dans lequel Test :: Les tests unitaires sont exécutés?

Par exemple, lorsque ces tests sont exécutés, je veux vous assurer que test_fizz fonctionne toujours en premier. xxx

update : pourquoi Est-ce que je veux faire ça? Ma pensée est que l'échec précoce de certains tests (ceux qui testent les méthodes plus simples et plus fondamentales) faciliteront la trajire des problèmes dans le système. Par exemple, le succès de la barre bar sur fizz fonctionne correctement. Si fizz est cassé, je veux savoir que tout de suite de la chauve-souris, car il n'est pas nécessaire de s'inquiéter de bar , qui échouera également, mais avec une sortie beaucoup plus compliquée dans les résultats du test.


4 commentaires

Pourquoi veux-tu faire cela? J'espère certainement que l'ordre de vos tests n'affecte pas les résultats des tests. Si c'est le cas, vous faites quelque chose de terriblement faux.


Je suis d'accord avec Gotgenes. Je vois votre mise à jour, mais si la barre s'appuie sur Fizz, vous devez tester la FIZZ, puis saisissez les résultats de Fizz lors de la mesure de test pour éviter la contamination croisée plutôt que de veiller à ce que vos tests fonctionnent dans un ordre particulier. Si la Fizz teste une fonctionnalité de niveau plus élevée, vous devez peut-être en faire un test fonctionnel.


Avoir une suite d'affirmations ordonnées conviennent bien, mais ce n'est plus un test unitaire. Son fonctionnel / intégration / comportementale (tout ce que vous voulez l'appeler ... c'est tout simplement pareil). Vous devriez faire avec un outil conçu pour cela comme RSPEC


Connecté: Stackoverflow.com/Questtions/1376267/...


3 Réponses :


5
votes

Les tests dans la même classe de test sont appelés dans l'ordre dans lequel elles sont définies. Cependant, les classes de test sont exécutées par ordre alphabétique par nom de classe.

Si vous avez vraiment besoin de contrôle fin, définissez les méthodes Fizz et Bar avec un préfixe autre que Test _ et à l'intérieur d'un test_fizz_bar méthode, appelez-les dans l'ordre et la barre d'exécution Conditionnellement sur le succès de la fabrication de Fizz.

EDIT: Il semble que des cadres de test d'unités différentes se comportent différemment. Pour Junit à Eclipse, il semble que les cas de test fonctionnent dans un ordre aléatoire: Unité de commande Tests dans la vue Junit de Eclipse


3 commentaires

Merci pour la suggestion. Dans le code i posté, les tests sont pas exécutés dans l'ordre dans lequel elles sont définies; plutôt, test_bar exécute en premier.


Dans mon expérience, les tests dans la même classe d'essai sont invoqués dans l'ordre alphabétique.


@Jonathanjulien: En effet. Où est le -10 quand vous en avez besoin?



3
votes

Nomez les tests que vous souhaitez exécuter d'abord avec un nom alphabétique de tri bas.

def test_AAA_fizz


1 commentaires

Test "01) devrait exécuter le premier test" Do ... fin



6
votes

Vous pouvez définir la commande de test avec test :: unité :: TestCase # test_order =: défini code>

Exemple: p>

Loaded suite test
Started
:a
.:b
.:c
.


0 commentaires