Erstens, Entschuldigung für den Titel, ich konnte mir nicht vorstellen, wie ich es am einfachsten erklären könnte!
Ich habe eine Methode, für die ich Komponententests schreiben möchte. Ich werde es ziemlich allgemein halten, da ich nicht auf die Implementierung der Methode, sondern nur auf das Testen derselben eingehen möchte. Die Methode ist:
public void HandleItem(item a)
{
CreateNewItem();
UpdateStatusOnPreviousItem();
SetNextRunDate();
}
Diese Klasse hat also eine öffentliche Methode, die dann einige private Methoden aufruft, um die Logik auszuführen.
Wenn ich den Unit-Test schreibe, möchte ich überprüfen, ob alle drei Dinge erledigt wurden. Da sie alle im selben Lauf aufgerufen werden, dachte ich, dass ich es als einen Test machen könnte:
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
}
Aber ich dachte, ich könnte es auch als drei separate Tests schreiben:
public void GivenItem_WhenRun_ThenItemIsCreated()
{
HandleItem(item);
}
public void GivenItem_WhenRun_ThenStatusIsUpdatedOnPreviousItem()
{
HandleItem(item);
}
public void GivenItem_WhenRun_ThenRunDateIsSet()
{
HandleItem(item);
}
Das scheint mir besser zu sein, da es sich im Wesentlichen um eine Auflistung der Anforderungen handelt, aber dann hängen alle drei zusammen und erfordern genau die gleiche Arbeit, die mit der getesteten Methode ausgeführt wurde. Daher muss derselbe Code dreimal ausgeführt werden.
Gibt es einen empfohlenen Ansatz dafür?
Vielen Dank