Как вы издеваетесь над многими зависимостями, необходимыми для тестов интеграции?
Я использую Mockito для своих "чистых" модульных тестов. "Pure" в этом случае означает тестирование одного класса, издевательства над всеми его зависимостями. Красивая.
Теперь приступим к интеграционным испытаниям. Скажем, в этом случае тест интеграции проверит что-то вроде этого:
- Сообщение помещается в очередь
- Сообщение обработано
- Ответное сообщение помещается в очередь ответов
Пусть также говорят, что обработка, которая происходит на шаге 2, является серьезной проблемой. Он опирается на множество взаимодействий с базами данных, на несколько внешних сервисов, файловую систему и всевозможные вещи. Есть также много побочных эффектов, которые поток инициирует, поэтому я не могу просто обеспечить правильность ответа - мне нужно проверить побочные эффекты.
Каждая из этих зависимостей обернута одним классом службы без состояния, что делает их приятными и макетируемыми.
Как люди справляются с этим?
Я хотел бы использовать Mockito, чтобы я мог проверить побочные эффекты, которые будет иметь этот поток. Тем не менее, документация Mocktio (и в значительной степени ее реализация), похоже, сильно сопротивляется использованию ее в контексте, отличном от "чистых" модульных тестов. Я попытался пройти этот маршрут, но
- Трудно заполнить данные заглушки (как там их много)
- Сложно иметь Spring вставить те закодированные экземпляры в мой beans
- Трудно "reset" издеваться, чтобы я мог проверить другой набор взаимодействий, не очистив заглушки.
ИЗМЕНИТЬ
Я знаю, что я мог бы обрабатывать проблему с базой данных чем-то вроде экземпляра HSQLDB, но все же проблема внешних служб. Для повторяемости я не могу полагаться на то, что эти службы находятся в состоянии, в котором я нуждаюсь, и т.д. Единственный вариант, который я вижу там, заключается в том, чтобы издеваться над ними.
Whatdaya do?