Мне нужно разработать довольно простой алгоритм, но я не совсем понимаю, как лучше написать тест для него.
Общее описание: пользователь должен иметь возможность удалить план. У плана есть связанные с ним задачи, их также необходимо удалить (если они еще не выполнены).
Псевдокод, как должен вести себя алгоритм:
PlanController.DeletePlan(plan)
=>
PlanDbRepository.DeletePlan()
ForEach Task t in plan.Tasks
If t.Status = Status.Open Then
TaskDbRepository.DeleteTask(t)
End If
End ForEach
Теперь, насколько я понимаю, юнит-тесты не должны касаться базы данных или вообще требовать доступа к каким-либо внешним системам, поэтому я предполагаю, что у меня есть два варианта здесь:
1) Смоделируйте вызовы Репозитория и проверьте, были ли они вызваны соответствующее количество раз как Утверждения
2) Создайте заглушки для обоих классов репозитория, установив их флаг удаления вручную, а затем убедитесь, что соответствующие объекты помечены для удаления.
В обоих подходах главный вопрос: что именно я здесь тестирую? Какова ДОПОЛНИТЕЛЬНАЯ ценность, которую дали бы мне такие тесты?
Любое понимание этого будет высоко оценено. Технически это не связано с какой-либо конкретной структурой модульного тестирования, хотя у нас есть RhinoMocks для использования. Но я бы предпочел общее объяснение, чтобы я мог правильно обернуть голову вокруг этого.