2010-11-06 2 views
0

Dans la classe que je suis en train de tester, il existe quelques instructions assert qui vérifient diverses conditions.Affirmation qui provoque l'arrêt des tests JUnit

L'une des méthodes est

GetNames(string id){ 
    assert(! id.Equals("")); // Causes all junit tests to stop 
    ... 
} 

et il y a une instruction assert pour vérifier si id est pas vide.

Dans mes tests unitaires, j'ai un test où je lui passe une chaîne vide, et quelques autres. Le problème est que lorsque l'instruction assert est exécutée dans la classe, les tests JUnit cessent de s'exécuter après ce scénario de test.

Comment puis-je modifier/configurer les tests unitaires afin que, en cas d'échec d'assertion dans la classe, les tests ne s'arrêtent pas.

Je dois activer les assertions pour que le code s'exécute correctement car il y a des cas où les variables sont incrémentées dans les assertions. Malheureusement, je ne peux pas changer le code. J'utilise le plugin JUnit dans Eclipse. Je n'ai aucun code dans les sections de configuration et de démontage.

Répondre

4

Si vous avez des instructions assert dans le code en cours de test et que les assertions sont enabled, ces instructions provoqueront le lancement d'un AssertionError. Vous pouvez attraper cela dans votre code de test et l'ignorer:

try { 
    xxx.GetNames(""); 
} catch (AssertionError e) { 
    // this is expected - ignore it 
} 
+0

Merci. Je viens de réaliser le code qui provoque l'arrêt des tests: "system.exit (1)". Existe-t-il un moyen d'exécuter les tests unitaires après l'appel de system.exit? – randomThought

+2

Non, cela provoque la fermeture de la machine virtuelle. Quel est le code que vous testez? Tout code de bibliothèque qui appelle 'System.exit' est rompu. –

+0

En fait, vous pouvez écrire votre propre 'SecurityManager' qui interdit un appel à' System.exit'. Voir par exemple http://stackoverflow.com/questions/309396/java-how-to-test-methods-that-call-system-exit –

Questions connexes