2010-10-22 3 views
0

Bonsoir tout le mondeune meilleure couverture de test JUnit nécessaire

Supposons que votre code a fait la déclaration suivante:

if (string ends with char 'y') { 
    if ((char before last is not 'e') || (char before last is not 'a')) { 
    return (something awesome); 
    } 
} 

C'est donc assez simple je pensais ...

Test1: entrée = « xy "(le dernier char est y, char avant le dernier n'est pas e ou a)

Résultat - partiel couverture ...

Quels sont les autres tests que je manque? Si cela était et & & au lieu de ||, je suppose que le test serait beaucoup plus facile, mais || m'a un peu confus.

Pouvez-vous suggérer Test2,3, n?

Merci

Répondre

2

Vous souhaitez tester le comportement attendu avec les entrées "ey" et "ay".

Vous pouvez trouver que votre méthode ne fait pas tout à fait ce que vous pensez. Je pense que || vous a en effet un peu dérouté.

2

Vous pouvez également écrire des tests pour vous assurer que vous ne retournez pas quelque chose de génial

Test2: input = "ez" does not return something awesome 
Test3: input = "af" does not return something awesome 

Les tests doivent prouver votre comportement prévu. Qu'en est-il de différentes longueurs de cordes?

(empty, '1', '2 ', '3 ') 

Vous voudrez peut-être transformer ceci en une méthode ou une fonction et lui donner un nom approprié. Ensuite, écrivez les tests pour cette méthode simple (dans TDD vous les écrivez d'abord).

1

Il y a différents types de couverture:

  • couverture au niveau de la méthode (ce compilateurs C++ utilisé pour faire)
  • couverture de niveau de ligne
  • couverture de niveau Symbole (la plupart des outils C# de couverture fournissent ce)
  • Couverture de niveau de branche (beaucoup d'outils de couverture de Java fournissent ceci)

Je pense que votre confusion vient i n jouer parce que vous pensez en termes de couverture de symbole pendant que votre outil vous donne une couverture de branche. Voici la distinction:

La couverture de symboles mesurera si vous avez atteint chaque symbole (c'est-à-dire un groupe de code jusqu'à un caractère ';'). La ligne ci-dessous contient deux symboles:

int i = 0; int j = 3;

La couverture de branche mesure chaque condition dans les valeurs true et false. Dans votre exemple, vous avez répertorié 4 conditions différentes, chacune ayant une branche vraie et une branche fausse.Afin de tester complètement chaque branche, vous avez besoin d'un test pour chacune des conditions suivantes:

  • chaîne se termine par ombles y, char avant-dernier est e
  • chaîne se termine par ombles y, char avant-dernier est un
  • chaîne
  • se termine par ombles y, char avant-dernier est ni un ni e
  • chaîne
  • ne se termine pas avec l'omble y

avec le code que vous avez écrit, vous aurez probablement l'expérience quelque chose d'inattendu. Vous obtiendrez quelque chose de génial, peu importe si la chaîne se termine par y. Si la chaîne se termine par 'ey', alors elle ne se termine pas par 'ay'. Si l'une de ces conditions est vraie, vous obtenez quelque chose de génial. Ecrivez les tests et voyez par vous-même.