То, что вы показали в своем примере, больше похоже на фальшивку / заглушку, чем на настоящую насмешку, и это правда, что если вы хотите, чтобы предварительно зависимое поведение требовалось только от заранее подготовленного поведения, то часто фальшивка может быть лучшим выбором, чем использование насмешливый каркас.
Существует каноническая статья Мартина Фаулера, в которой обсуждается тот факт, что издевательства не являются заглушками , и я взял из него следующий абзац:
Ключевое отличие здесь в том, как мы
убедитесь, что заказ сделал правильно
вещь во взаимодействии с
склад. С государственной проверкой мы
сделать это, утверждая против
состояние склада. Издевается над поведением
проверка, где мы вместо этого проверяем
чтобы убедиться, что заказ сделан правильно
звонки на склад.
По существу, с помощью имитаций вы обычно намереваетесь проверить, как тестируемый метод действует на зависимости - ваш имитатор имеет ожидания, и вы проверяете эти ожидания после запуска метода.
Конечно, вы все еще могли бы писать свои собственные кейсы, но использование фреймворка сэкономит вам много времени, даст больше читаемых тестов и сэкономит на ошибках в тестах.
Это особенно верно, поскольку ваши ожидания становятся все более сложными, представьте себе, что у вас есть метод для тестирования, который вызывает определенный зависимый класс разное число раз с различными значениями в зависимости от входных параметров - это было бы сложно написать для насмешки самостоятельно, но тривиально с использованием хорошей насмешливой основы.
Чтобы продемонстрировать с помощью некоторого кода, представьте этот метод PrintOrders (извините за глупый пример):
public void PrintForeignOrders(List<Orders> orders)
{
foreach(var order in orders)
{
if (order.IsForeign)
{
printer.PrintOrder(order.Number, order.Name);
}
}
}
Возможно, вы захотите проверить хотя бы:
- Когда список пуст, ничего не печатается
- При наличии иностранного заказа печатается
- При наличии двух заказов печатаются оба (с правильным номером и названием)
При наличии хорошей моделирующей среды для настройки этих тестов на объекте инъекции принтером достаточно нескольких нажатий клавиш.