Je préfère avoir un scénario de test par méthode.
Tout d'abord, il est plus facile de voir quels cas sont testés s'ils sont divisés en méthodes, plutôt que de chercher des commentaires intégrés dans le code. La plupart des IDEs vous donneront un résumé des méthodes, donc au lieu de dire "est-ce que j'ai testé le cas limite XYZ ?" et ensuite de chercher un commentaire, ou de chercher le code qui met en place ce cas limite, vous cherchez simplement la méthode appelée setupContextEdgeCaseXYZ()
.
Une deuxième raison est que si vous avez plusieurs cas ensemble, l'un peut échouer et les autres ne s'exécutent jamais.
testDefaultCase()
testInvalidInput()
testEdgeCase1()
testEdgeCase2()
Avec cette structure, il serait plus facile de déterminer que la vérification des entrées est mauvaise et que le cas limite 2 est mal traité, mais que les autres sont corrects (et vous pourriez découvrir que deux cas défaillants sont liés et que le problème est diagnostiqué plus rapidement).
Une troisième raison est que vous pouvez accidentellement laisser des valeurs d'un ensemble de tests précédents qui invalident un dernier test de manière inaperçue. Un exemple simple :
@Test
public void testMyMethod() {
//test default
String test = Foo.bar(null);
assertEquals("foo", test);
//test case 1
Foo.bar(aValue);
//Oops forgot to set value above, this passes regardless of
//what the above call does
assertEquals("foo", test);
}
En séparant les cas, vous pouvez éviter des erreurs comme celles mentionnées ci-dessus, qui se transformeraient en une erreur de compilation ou un avertissement.