Récemment un nouveau concept de Les théories ont été ajoutées à Junit (depuis v4.4). P>
En un mot, vous pouvez marquer votre méthode de test avec Junit exécutera séquentiellement votre méthode de test paramétré Passage des paramètres extraits de Le concept semble être très similaire à Alors, je me demande quelle est la raison pour ne pas exécuter Afin de le comparer avec le standard des théories standard StandardTheoresBehaviordemo, puis errenttolérantheoresBehaviordemo qui sont placés sous @Theory code> annotation (au lieu de
@Test code>), rendez votre méthode de test paramétrée et déclarez une gamme de paramètres, Marqué avec
@DaTapoints code> Annotation quelque part dans la même classe. p>
@datapoints code> l'un après l'autre. Mais seulement jusqu'à ce que la première invocation de ce type échoue (en raison de la raison). P>
@DataProviders code> à partir de TESTNG, mais lorsque nous utilisons des fournisseurs de données, tous les scénarios sont exécutés de leurs résultats d'exécution. Et c'est utile car vous pouvez voir combien de travaux scénarieux / ne fonctionnent pas et vous pouvez réparer votre programme plus efficacement. P>
@Theory code> -Marked sur chaque
@datapoint code>? (Cela ne semble pas si difficile d'hériter du coureur des théories et de faire un coureur personnalisé qui ignorera les échecs, mais pourquoi n'avons-nous pas de comportement de la boîte?) P>
src / test /... Code> Dossier. p>
3 Réponses :
AFAIK, l'idée est la même que avec des affirmations, la première défaillance arrête le test. C'est la différence entre les paramétrages et les théories. P>
paramétré prend un ensemble de points de données et exécute un ensemble de méthodes de test avec chacune d'elles. Les théories font la même chose, mais échouent lorsque la première affirmation échoue. P>
Essayez de regarder paramétrice . Peut-être que cela fournit ce que vous voulez. P>
Voir l'UMD (Je pensais que vous pourriez le trouver intéressant).
Rapporter plusieurs échecs dans un seul test est généralement un signe que Le test fait trop, comparé à ce qu'est un test unitaire à faire. Généralement cela signifie soit que le test est vraiment un fonctionnel / acceptation / test client ou, s'il s'agit d'un test unitaire, alors est trop grosse test unitaire. P>
Junit est conçu pour fonctionner mieux avec un certain nombre de petits tests. Ce Exécute chaque test dans une instance séparée de la classe de test. Ce Rapports échec de chaque test. Le code de configuration partagé est le plus naturel lorsque partage entre tests. C'est une décision de conception qui imprègne Junit, et lorsque vous décidez de signaler plusieurs échecs par test, vous commencez à lutte contre junit. Ceci n'est pas recommandé. P>
Les tests longs sont une odeur de conception et indiquent la probabilité d'un design problème. Kent Beck aime dire dans ce cas que "il y a un possibilité d'apprendre quelque chose à propos de votre conception. "Nous aimerions voir une langue modèle se développer autour de ces problèmes, mais il n'a pas encore été écrit. Source: http://junit.sourceforge.net/doc/faq/faq.htm # tests_12 p>
Pour ignorer les défaillances d'affirmation Vous pouvez également utiliser une règle de collecteur d'erreurs Junit: P>
La règle d'erreur du collecteur permet l'exécution d'un test de continuer après Le premier problème est trouvé (par exemple, pour collecter tous les éléments incorrects rangées dans une table, et signalez-les tous à la fois) p> BlockQuote>
Par exemple, vous pouvez écrire un test comme celui-ci. P>
public static class UsesErrorCollectorTwice { @Rule public ErrorCollector collector= new ErrorCollector(); @Test public void example() { String x = [..] collector.checkThat(x, not(containsString("a"))); collector.checkThat(y, containsString("b")); } }
Une théorie est fausse si un seul test est faux, en fonction de la définition d'une théorie. Si vos cas de test ne suivent pas cette règle, il serait faux de les appeler une "théorie". P>
IMHO, à des fins d'ingénierie, ce n'est pas très utile. Après avoir exécuté des tests, vous souhaitez connaître autant que possible de l'exactitude de votre système. Encore une fois, je ne vois rien de mal à savoir, dans lequel et dans combien de cas la théorie est fausse. C'est bien mieux que de savoir que la théorie est fausse sans aucun détail.
Il est supposé que vous écrivez de petites unités de test, chacune des tâches testant votre application d'un seul côté. Parfois, ce chèque est mieux réalisé comme une théorie. Il ne peut pas b> d'une utilisation faible à des fins, car il est basé sur le principe de base de la logique pratique. S'il vous semble que c'est mauvais pour une utilisation chez certains sujets chez 99%, cela signifie que vous avez des problèmes pour comprendre le sujet.