Mam metodę, dla której chcę pisać testy jednostkowe. Zamierzam zachować to dość ogólne, ponieważ nie chcę omawiać implementacji metody, tylko jej testowanie. Metoda jest następująca:
public void HandleItem(item a)
{
CreateNewItem();
UpdateStatusOnPreviousItem();
SetNextRunDate();
}
Więc ta klasa ma jedną metodę publiczną, która następnie wywołuje niektóre prywatne metody do wykonania logiki.
Pisząc test jednostkowy, chcę sprawdzić, czy wszystkie trzy rzeczy zostały wykonane. Ponieważ wszystkie są wywoływane w tym samym przebiegu, pomyślałem, że mogę to zrobić jako jeden 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
}
Ale pomyślałem, że mógłbym to również napisać jako trzy osobne testy:
public void GivenItem_WhenRun_ThenItemIsCreated()
{
HandleItem(item);
}
public void GivenItem_WhenRun_ThenStatusIsUpdatedOnPreviousItem()
{
HandleItem(item);
}
public void GivenItem_WhenRun_ThenRunDateIsSet()
{
HandleItem(item);
}
Wydaje mi się więc, że jest to ładniejsze, ponieważ zasadniczo wymienia wymagania, ale wszystkie trzy są ze sobą powiązane i wymagają dokładnie takiej samej pracy, jaką wykonano na testowanej metodzie, więc uruchamiam ten sam kod 3 razy.
Czy istnieje zalecane podejście do tego?
Dzięki