Quelle est l'utilisation réelle de 'fail' dans le cas de test JUnit?Quelle est l'utilisation réelle de 'fail' dans le cas de test JUnit?
Répondre
Quelques cas où je l'ai trouvé utile:
- marquer un test incomplet, il échoue et vous avertit jusqu'à ce que vous pouvez le terminer
- en vous assurant une exception est levée:
try{ // do stuff... fail("Exception not thrown"); }catch(Exception e){ assertTrue(e.hasSomeFlag()); }
Note:
Depuis junit4, il y a une plus élégante façon de tester qu'une exception est levée: Utilisez l'annotation @Test(expected=IndexOutOfBoundsException.class)
Cependant, cela ne fonctionnera pas si vous aussi voulez inspecter l'exception, alors vous avez toujours besoin de fail()
.
Je pense que le cas d'utilisation habituel est de l'appeler lorsqu'aucune exception n'a été générée dans un test négatif.
Quelque chose comme le pseudo-code suivant:
test_addNilThrowsNullPointerException()
{
try {
foo.add(NIL); // we expect a NullPointerException here
fail("No NullPointerException"); // cause the test to fail if we reach this
} catch (NullNullPointerException e) {
// OK got the expected exception
}
}
Si vous ne cochez pas quelque chose dans le bloc de capture, vous pouvez utiliser l'annotation de méthode @ExpectedException (NullNullPointerException.class) pour déclarer que vous attendez une exception (d'un type spécial). – FrVaBe
permet de dire que vous écrivez un test pour un flux -ve où le code testé devrait soulever une exception
try{
bizMethod(badData);
fail(); // FAIL when no exception is thrown
} catch (BizException e) {
assert(e.errorCode == THE_ERROR_CODE_U_R_LOOKING_FOR)
}
Voici comment j'utilise la méthode Fail.
Il y a trois états que votre cas de test peut se retrouver dans
- Passé: La fonction en cours de test exécuté avec succès et renvoyé données comme prévu
- pas été validé: La fonction en cours de test exécuté avec succès, mais la données renvoyées n'a pas été comme prévu
- Failed: La fonction n'a pas été exécuté avec succès et ce ne fut pas
destiné (contrairement aux cas de test négatifs qui prévoient une exception à se produisent).
Si vous utilisez eclipse, trois états sont indiqués par un marqueur vert, bleu et rouge respectivement. J'utilise l'opération fail pour le troisième scénario.
par exemple. : public Integer add (entier a, entier b) {return new Entier (a.intValue() + b.intValue())}
- Passed cas: a = new interger (1), b = new Integer (2) et la fonction retourne 3
- pas passé de cas: a = new interger (1), b = new Integer (2) et la fonction retourne la valeur soem autre que 3
- cas a échoué: a = null, b = null et la fonction lance une NullPointerException
Si vous regardez le code source de JUnit, vous verrez que les assertions utilisent 'fail()'. –
Je l'ai utilisé dans le cas où quelque chose peut avoir mal tourné dans ma méthode @Before.
public Object obj;
@Before
public void setUp() {
// Do some set up
obj = new Object();
}
@Test
public void testObjectManipulation() {
if(obj == null) {
fail("obj should not be null");
}
// Do some other valuable testing
}
Oui, tester les conditions préalables est bon. Cependant, si vous voulez vous assurer que la méthode '@ Before' a réussi, il est probablement préférable de la vérifier directement dans cette méthode. En prime, au moins JUnit et TestNG signaleront un échec différent pour les erreurs des méthodes '@ Before' /' @ After', ainsi peuvent voir que le problème n'était pas dans le test lui-même. – sleske
I, par exemple, utilise fail()
pour indiquer des tests qui ne sont pas encore terminé (il arrive); autrement, ils montreraient comme réussi.
Ceci est peut-être dû au fait que je ne suis pas au courant d'une sorte de fonctionnalité incomplete(), qui existe dans NUnit.
utiliser simplement:
org.junit.Assert.fail("Exception expected");
L'utilisation la plus importante est probablement le cas de vérification d'exception.
Alors que junit4 inclut le expected element pour vérifier si une exception s'est produite, il semble qu'elle ne fasse pas partie de la version plus récente de junit5. Un autre avantage de l'utilisation fail()
sur le expected
est que vous pouvez le combiner avec finally
permettant le nettoyage de cas de test.
dao.insert(obj);
try {
dao.insert(obj);
fail("No DuplicateKeyException thrown.");
} catch (DuplicateKeyException e) {
assertEquals("Error code doesn't match", 123, e.getErrorCode());
} finally {
//cleanup
dao.delete(obj);
}
Comme noté dans un autre commentaire. Avoir un test d'échec jusqu'à ce que vous puissiez terminer l'implémentation semble raisonnable aussi.
- 1. Utilisation d'Eclipse pour créer un nouveau cas de test JUnit
- 2. Accéder à une liste en cas de test JUnit
- 3. Cas de test Junit pour la classe wrapper
- 4. Comment obtenir le nom d'un cas de test dans JUnit 4 lors de l'exécution?
- 5. jUnit la même exception dans différents cas
- 6. Test d'exception Junit
- 7. Le code source est dans le JDK 1.4 et des cas de test JUnit dans JDK 1.5
- 8. Est-il possible de générer par programme des cas de test et des suites JUnit?
- 9. Méthodes de test Junit
- 10. Maven: Utilisation de JUnit test-help requis
- 11. Test de GUI avec JUnit
- 12. esprit d'un test JUnit
- 13. Quelle est l'utilisation réelle de jquery?
- 14. Problème de test Java Junit
- 15. Exécution de classes de test JUnit à partir d'une autre classe de test JUnit
- 16. Fin d'un test JUnit
- 17. Test de ServiceLocator à l'aide de JUnit
- 18. JUnit test timing dans Eclipse
- 19. JUnit test for System.out.println()
- 20. GWT test JUnit dans NetBeans
- 21. Quelle est l'utilisation réelle de l'interface dans Java?
- 22. Comment exécuter un cas de test unique dans Junit à partir d'Eclipse?
- 23. Test d'une classe finale dans JUnit
- 24. Dynamic Junit Test
- 25. JUnit, test et threads
- 26. Exécution de plusieurs données de test sur le même ensemble de cas de test
- 27. JUnit Test Compilation
- 28. Impossible de charger ResourceBundle pendant le test de junit
- 29. Test des exceptions à l'aide de JUnit. Le test échoue même si l'exception est interceptée
- 30. Vérification d'un délai d'attente dans un scénario de test JUnit
Considérez cet article de blog sur les mérites relatifs de l'échec par rapport à l'annotation attendue: http://blog.jooq.org/2016/01/20/use-junits-expected-exceptions-sparingly/ – lbalazscs
@sleske "si vous voulez aussi inspecter l'exception, alors vous devez toujours fail() "- non. ExpectedException est le chemin, voir https://github.com/junit-team/junit4/wiki/exception-testing – kraxor
@kraxor: Vrai, je ne savais pas à ce sujet quand j'ai écrit la réponse (ce n'était probablement même pas autour puis). – sleske