Выполнение тестов электронной почты Junit без отправки электронных писем - PullRequest
32 голосов
/ 22 июня 2009

Я хочу запустить модульные тесты (Junit) на некоторых модельных классах, которые обычно отправляют электронные письма, подтверждающие, что что-то произошло. Есть ли фиктивный почтовый сервер, который вы можете использовать с модульными тестами, который позволит вам подтвердить, что ваш прогон попытался отправить электронное письмо, не отправляя электронные письма?

Кажется, это было бы неплохо, но я не уверен, что хочу написать свой. Стек приложений для аспекта электронной почты - Velocity + Spring, поэтому было бы предпочтительно, если бы на тестовый сервер можно было просто указать файл applicationContext.xml.

Ответы [ 7 ]

29 голосов
/ 22 июня 2009

Альтернативный ответ: Dumbster - это поддельный SMTP-сервер, разработанный для тестирования. Написано на Java.

15 голосов
/ 22 июня 2009

Я думаю, что Mock JavaMail - это то, что вы хотите.

12 голосов
/ 16 июля 2015

Я бы посмотрел на GreenMail, который жив (очевидно, Dumbster мертв) с большим количеством функциональных возможностей и хороших примеров.

http://www.icegreen.com/greenmail/

3 голосов
/ 22 июня 2009

Я предполагаю, что вы используете Javamail, и проблема в том, что javax.mail.Session является окончательным и, следовательно, не может быть поддельным.

Похоже, другие предложили вам просто определить свой собственный интерфейс "почтового сеанса" и создать реализацию, которая использует Javamail. В своих тестах вы просто внедряете макет, а в «режиме реального мира» вы внедряете реализацию Javamail.

JMock и EasyMock будут поддерживать все утверждения, которые вы, возможно, захотите сделать в сообщении, которое вы отправляете, и ваше тестирование завершено.

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

1 голос
/ 06 мая 2014

Вы можете попробовать JavaMail Mock2 https://github.com/salyh/javamail-mock2

Он в основном ориентирован на IMAP / POP3, но SMTP Mock также доступен. Доступно в Maven Central.

Особенности

  • Поддержка изображений, изображений, pop3, pop3s, smtp, smtps
  • Поддерживается для POP3: приведение к POP3Folder, Folder.getUID (сообщение msg)
  • Поддерживается для IMAP: приведение к IMAPFolder, приведение к UIDFolder, вложенные папки, -Folder.getMessagesByUID (...), удаление / переименование папок, добавление сообщений
  • Поддержка SMTP: Mock Transport.send ()
  • На данный момент не поддерживается: расширения IMAP, такие как IDLE, CONDSTORE, ... и приведение к POP3Message / IMAPMessage, слушатели хранилища
0 голосов
/ 22 июня 2009

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

Чтобы проверить работоспособность почтовой службы, отправьте себе письмо локально. Попробуйте hMail , если вы используете Windows.

0 голосов
/ 22 июня 2009

У Фила Хаака есть блог о модульном тестировании отправки электронной почты , с решением, которое он кодирует на бесплатном почтовом сервере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...