Tout d'abord, excuses pour le titre, je ne pouvais pas penser à la façon la plus simple de l'expliquer!
J'ai une méthode pour laquelle je veux écrire des tests unitaires. Je vais le garder assez générique car je ne veux pas discuter de l'implémentation de la méthode, juste son test. La méthode est la suivante:
public void HandleItem(item a)
{
CreateNewItem();
UpdateStatusOnPreviousItem();
SetNextRunDate();
}
Cette classe a donc une méthode publique qui appelle ensuite des méthodes privées pour exécuter la logique.
Donc, lors de l'écriture du test unitaire, je veux vérifier que les trois choses ont été faites. Comme ils sont tous appelés dans la même manche, j'ai pensé que je pouvais le faire en un seul test:
public void GivenItem_WhenRun_Thenxxxxx
{
HandleItem(item);
// Assert item has been created
// Assert status has been set on the previous item
// Assert run date has been set
}
Mais je pensais que je pouvais aussi l'écrire en trois tests distincts:
public void GivenItem_WhenRun_ThenItemIsCreated()
{
HandleItem(item);
}
public void GivenItem_WhenRun_ThenStatusIsUpdatedOnPreviousItem()
{
HandleItem(item);
}
public void GivenItem_WhenRun_ThenRunDateIsSet()
{
HandleItem(item);
}
Donc, cela me semble plus agréable car il répertorie essentiellement les exigences, mais les trois sont liés et nécessitent exactement le même travail effectué sur la méthode testée, donc j'exécute le même code 3 fois.
Y a-t-il une approche recommandée à adopter avec cela?
Merci