Что самый легкий путь состоит в том, чтобы дразнить IMAP или сервер POP для модульных тестов? [дубликат]

Этот вопрос уже имеет ответ здесь:

Я хочу к модульному тесту JAVA-приложение, которое выбирает письма от входного почтового ящика, во многом как этот парень. В настоящее время я выполняю модульные тесты против реального почтового ящика на реальном mailserver нашей компании, который было легко настроить, но имеет следующие недостатки:

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

Я хотел бы включить сервер IMAP на локальном порте, который фальсифицирует ящик входящих сообщений на основе данных тестирования, сохраненных в файлах вместе с тестовыми классами. Я могу думать о следующих подходах:

  • Выполните сервер сокета и реализуйте элементарное подмножество IMAP
  • Пользуйтесь высокоуровневой библиотекой, сделанной для создания почтовых серверов
  • Используйте существующую реализацию почтового сервера, которую я могу встроить в свои тесты

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

Если это имеет значение, я использую Знатока и TestNG во время процесса сборки.

25
задан Community 23 May 2017 в 12:00
поделиться

3 ответа

Зеленая почта может быть полезна.

GreenMail - это интуитивно понятный и простой в использовании набор тестов почтовых серверов с открытым исходным кодом для тестирования. Поддерживает SMTP, POP3, IMAP с поддержкой сокета SSL.

37
ответ дан 28 November 2019 в 21:22
поделиться

Напишите тест, который полагается на существующий почтовый сервер, чтобы проверить, что ваш код может получить к нему доступ. Этот код должен выполнить надлежащую настройку (т.е. отправить себе письмо). Защитите этот тест какой-нибудь глобальной переменной или System.property, чтобы вы могли включать/выключать его во время выполнения.

Перенесите код для доступа к серверу в изолированный класс.

Переопределите этот класс в своих тестах. В тесте просто проверьте правильность текста письма. Если вы получите сообщение об ошибке, что доступ к серверу не работает, включите тест "access the real server test" и проверьте.

1
ответ дан 28 November 2019 в 21:22
поделиться

Я бы предложил встроить чистый Java IMAP/POP сервер в ваш тестовый код.

Для этого у вас есть множество возможностей, включая:

  • Написать свой собственный IMAP mock с помощью Javamail
  • Использовать Dwarf mail server
  • Использовать JMock для эмуляции различных интерфейсов вашего почтового сервера (в конце концов, у него должен быть интерфейс, не так ли?)
1
ответ дан 28 November 2019 в 21:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: