Il est courant d'avoir des classes avec des méthodes avec des paramètres de chaîne qui doivent être validées agains nul ou vide, comme cet exemple:Comment tester les paramètres de chaîne vides et/ou vides dans une méthode?
public class MyClass {
public void MyMethod(string param){
if(string.IsNullOrEmpty(param)){
throw new ArgumentNullException(...);
}
//...
}
}
Il est clair que le comportement de la méthode est la même pour les deux (invalide) valeurs. C'est une situation très courante, et quand il s'agit de tester ces méthodes, je doute toujours de la façon de le faire. Je crée toujours deux tests distincts pour ces cas:
[TestClass]
public class Tests {
[TestMethod]
public void MyMethod_should_fail_if_param_is_null(){
//...
myclass.MyMethod(null);
//...
}
[TestMethod]
public void MyMethod_should_fail_if_param_is_empty(){
//...
myclass.MyMethod("");
//...
}
}
Mais je vois trop de redondance. Ces tests sont exactement les mêmes, la seule différence étant le paramètre passé à la méthode. Cela me dérange beaucoup, puisque je dois créer deux tests pour chaque paramètre de chaîne. Une méthode avec 3 paramètres aurait 6 tests seulement pour tester les paramètres.
Je pense que c'est la bonne façon de tester ces paramètres, mais si je sais que 99% des paramètres de chaîne seront validés de la même manière, ne serait-il pas mieux de les tester pour null (et vide) que le comportement dans l'autre cas sera le même?
Je voudrais savoir ce que vous en pensez. Je sais que ce que je demande est plus une opinion technique qu'une question technique, mais je pense que la communauté de test peut avoir quelque chose d'intéressant à dire sur cette situation.
Merci!
Merci pour votre réponse rapide! J'ai déjà créé ma propre version de ExpectException (vous pouvez la consulter ici http://gerardocontijoch.wordpress.com/2008/12/02/uso-de-expectedexceptionattribute-para-testear-excepciones/), et l'utiliser dans ces cas. Je ne peux pas vivre sans: P J'aime la solution que vous proposez, j'y ai pensé, mais comme vous l'avez dit, "cela ne suit pas le dogme normal des tests unitaires" et je voulais seulement le suivre, vous savez , s'habituer aux bonnes pratiques. Je vais probablement aller chercher cette solution après tout. Voyons ce que les autres pensent ... –
Il est, je ne crois pas que suivre le dogme et jeter le pragmatisme par la fenêtre * est * une bonne pratique :) Il vaut la peine de * savoir * le dogme, mais en ignorant consciemment quand vous J'ai pesé le pour et le contre d'une situation particulière et je l'ai trouvé ne pas fonctionner. –
Je suis totalement d'accord avec vous et c'est la raison de ma question. J'ai trouvé les inconvénients de suivre une certaine "bonne" pratique, mais pas beaucoup de pros (sorte de contradiction, bonne pratique avec plus de contre que de pros), alors j'ai posté une question pour voir s'il y avait quelque chose qui me manquait. –