Разумно ли использовать насмешку в тестовых случаях BDD?
Мы собираемся реализовать небольшое Java-приложение с BDD, которое читает лист MS Excel с использованием POI apache.org и печатает некоторый текст, основанный на этом Excel, в STDOUT. Мы согласились, что самым простым решением будет создание test.xls для каждого тестового примера BDD.
Была еще одна идея, заключающаяся в том, что мы должны высмеивать вызовы библиотеки POI и ожидания тестирования. Причиной этой идеи является то, что мы не хотим тестировать POI и тратить время на его использование в каждом тестовом случае. Кроме того, доступ к файлам может быть сложным в разных операционных системах.
Разумно ли использовать в таких случаях издевательство?
Спасибо жолт
2 ответа
Я никогда не был большим фанатом насмешек, но в некоторых случаях это имеет смысл.
Я думаю, что Apache POI достаточно стабилен, и вы можете его правильно заглушить. Важно спросить, тестируете ли вы взаимодействие с POI? Если да, то вы не можете издеваться над этим.
Поскольку вы говорите, что не тестируете взаимодействие с POI, тогда продолжайте.
Определение предела того, где вы издеваетесь, а где нет, определенно серое, однако я думаю, что есть два общих утверждения о насмешках, которые предлагают руководство:
Итак, хотя бывают случаи, когда вы хотите макетировать подсистему из-за ее медленной работы, правильное моделирование идентифицирует эту медленную систему как нечто, требующее архитектурного разделения, поэтому вы должны разработать интерфейсы, которые должным образом отображают ваше взаимодействие с этой медленной системой, и имитировать поведение там. Тогда у вас будет другая категория тестов, которые тестируют реализации тех интерфейсов, которые фактически взаимодействуют с медленными ресурсами, чтобы убедиться, что этот код работает.
С точки зрения того, как это относится к POI, может быть, а может и нет веское оправдание, чтобы смоделировать абстракцию к POI. Это зависит от масштаба проекта. Для меня, я бы сделал это, если бы почувствовал, что проекту может потребоваться другое решение для работы с электронными таблицами в течение длительного времени.
Я, конечно, не стал бы издеваться над фактическими классами POI, так как первая ссылка, приведенная выше, совершенно ясно показывает, сколько боли может быть связано с этим подходом.