Разумно ли использовать насмешку в тестовых случаях BDD?

Мы собираемся реализовать небольшое Java-приложение с BDD, которое читает лист MS Excel с использованием POI apache.org и печатает некоторый текст, основанный на этом Excel, в STDOUT. Мы согласились, что самым простым решением будет создание test.xls для каждого тестового примера BDD.

Была еще одна идея, заключающаяся в том, что мы должны высмеивать вызовы библиотеки POI и ожидания тестирования. Причиной этой идеи является то, что мы не хотим тестировать POI и тратить время на его использование в каждом тестовом случае. Кроме того, доступ к файлам может быть сложным в разных операционных системах.

Разумно ли использовать в таких случаях издевательство?

Спасибо жолт

2 ответа

Решение

Я никогда не был большим фанатом насмешек, но в некоторых случаях это имеет смысл.

Я думаю, что Apache POI достаточно стабилен, и вы можете его правильно заглушить. Важно спросить, тестируете ли вы взаимодействие с POI? Если да, то вы не можете издеваться над этим.

Поскольку вы говорите, что не тестируете взаимодействие с POI, тогда продолжайте.

Определение предела того, где вы издеваетесь, а где нет, определенно серое, однако я думаю, что есть два общих утверждения о насмешках, которые предлагают руководство:

  1. Макет только интерфейсы, которые у вас есть.
  2. Издевательства не окурки.

Итак, хотя бывают случаи, когда вы хотите макетировать подсистему из-за ее медленной работы, правильное моделирование идентифицирует эту медленную систему как нечто, требующее архитектурного разделения, поэтому вы должны разработать интерфейсы, которые должным образом отображают ваше взаимодействие с этой медленной системой, и имитировать поведение там. Тогда у вас будет другая категория тестов, которые тестируют реализации тех интерфейсов, которые фактически взаимодействуют с медленными ресурсами, чтобы убедиться, что этот код работает.

С точки зрения того, как это относится к POI, может быть, а может и нет веское оправдание, чтобы смоделировать абстракцию к POI. Это зависит от масштаба проекта. Для меня, я бы сделал это, если бы почувствовал, что проекту может потребоваться другое решение для работы с электронными таблицами в течение длительного времени.

Я, конечно, не стал бы издеваться над фактическими классами POI, так как первая ссылка, приведенная выше, совершенно ясно показывает, сколько боли может быть связано с этим подходом.

Другие вопросы по тегам