9
votes

Codecouvernement vs attenduException

J'ai plusieurs personnes de ce modèle:

public static void ExpectException<_T> (Action action) where _T: Exception
{
    try { action(); }
    catch (_T) { return; }
    Assert.Fail ("Expected " + _T);
}


0 commentaires

4 Réponses :


0
votes

YEP C'est joli tarif standard - beaucoup de nos tests font de même. Dans le même temps, vous devez vous demander si vous ne placez pas une valeur trop élevée sur la couverture du code si ces demi-branches pèsent tant que cela vaut la peine d'être effort.


1 commentaires

Actuellement à une couverture d'horrible de 35%, cela n'ajoute donc pas beaucoup. C'est plus un problème de conception mineur (pouvant économiser quelques centaines de lignes de code de test).



10
votes

Qu'est-ce que vous suggérez est valide. Outre votre problème de couverture de code, je dirais que cela vaut mieux que d'utiliser l'attribut attendue car il montre explicitement quelle ligne du test devrait lancer l'exception. En utilisant attenduException signifie que une ligne de code de code dans le test peut lancer le type d'exception attendu et le test passera toujours. Si l'erreur provient d'un autre appel qui n'était pas censé lancer, il peut dissimuler le fait que le test devrait échouer car la ligne qui devrait être jetée n'est pas.

Quelle serait une modification utile à ce que vous avez proposé Serait de retourner l'exception attrapée: xxx

Cela permettrait au code de test d'affirmer davantage l'exception si elle souhaitée (c.-à-d. Vérifier qu'un message particulier a été utilisé). < / p>

Nunit (bien que cela ne semble pas que vous l'utilisez comme vous possédez un TestMethod Attribut) a une construction intégrée similaire à ce que vous avez proposé: xxx


1 commentaires

+1. Bon produit. Cela m'a été amarré depuis un moment, mais je n'ai jamais eu le tour de la fixer.



3
votes

@Adrianbanks L'espérance exception ne fonctionne pas comme prévu si le paramètre d'action jette une autre exception que l'exception attendue: xxx

lorsque j'exécute le testMethod "my_test", je viens de recevoir un message dire que La méthode de test soulevée et System.ArgumentException: Bonjour. Dans ce cas, il devrait indiquer "Invalidération attendueException". Je propose une nouvelle version pour la méthode d'attente d'exception: xxx


0 commentaires

2
votes

Je sais que c'est un ancien sujet, mais j'ai couru dans le même problème.

Finalement je me suis demandé: pourquoi dois-je connaître la couverture des tests? Je ne suis pas! - Règre donc, alors la couverture est plus propre.

dans mon projet de test J'ai ajouté un codecoverage.RunSettings fichier et ceci est le contenu: xxx

après la sélection de ce paramètres de test fichier ma couverture de code est 100%

ceci Voici aucun besoin de "pirater" le système de couverture de code de test de l'unité, juste pour atteindre 100%: -)


1 commentaires

Merci pour cette idée! Je ne peux pas l'essayer moi-même, mais cela semble être une très bonne solution, si vous assurez simplement que les tests eux-mêmes sont corrects.