Во-первых, мой пример на php, но это не вопрос php, а просто вопрос о тестировании лучших практик
Итак, у меня есть эта функция, которую я хотел бы протестировать
public function createNewTodo(CreateTodoQuery $query): TodoResponseObject
{
$new_todo = TodoFactory::createNew($query->getUserId(), $query->getTitle())
->withDescription($query->getDescription());
$new_todo = $this->todo_repository->save($new_todo);
return TodoResponseObject::fromDomain($new_todo);
}
Для того, чтобы протестировать эту функцию, мне нужно будет заглушить свою зависимость (todo_repository
).Я хочу провести один тест, который подтверждает, что я получаю экземпляр TodoResponseObject
.Достаточно просто
Теперь важный момент: я хочу заявить, что объект todo создается с параметрами, установленными в запросе.Поскольку я собираюсь заглушить todo_repository
, на самом деле я не могу этого сделать, так как мой тест просто подтвердит значения того, что я настроил для возврата моей заглушки.Я мог бы сделать что-то вроде соглашения типа assertCalledWith
, но затем я вхожу в анти-шаблон тестирования, который называется «тестирование реализации, а не функциональности».
Итак, как лучше всего получитьвокруг этого, и что будет лучшим способом проверить это?