Ответ 1
Greenmail может оказаться полезным.
GreenMail - это открытый, интуитивно понятный и простой в использовании набор тестов почтовых серверов для тестирования. Поддерживает SMTP, POP3, IMAP с поддержкой сокетов SSL.
Я хочу unit test приложение Java, которое извлекает письма из почтового ящика электронной почты, как этого парня. В настоящее время я запускаю модульные тесты против реального почтового ящика на нашем почтовом сервере нашей компании, который был прост в настройке, но имеет следующие недостатки:
Я хотел бы запустить IMAP-сервер на локальном порту, который подделывает почтовый ящик на основе тестовых данных, хранящихся в файлах вместе с тестовыми классами. Я могу думать о следующих подходах:
Я бы хотел избежать первого варианта, это выглядит просто, но я полагаю, что из-за подобного опыта есть длинный хвост работы, ожидающий дальнейшего продвижения по дороге. Просто подумайте о необходимости тестирования безопасных подключений и т.д. Аналогичным образом второй вариант, похоже, очень много работает, но я еще не нашел почтовый сервер, который позволит использовать третий.
Если это имеет значение, я использую Maven и TestNG во время процесса сборки.
Greenmail может оказаться полезным.
GreenMail - это открытый, интуитивно понятный и простой в использовании набор тестов почтовых серверов для тестирования. Поддерживает SMTP, POP3, IMAP с поддержкой сокетов SSL.
Напишите тест, который опирается на существующий почтовый сервер, чтобы проверить, может ли ваш код получить к нему доступ. Этот код должен выполнить правильную настройку (т.е. Он должен отправить себе почту). Защитите этот тест с помощью некоторой глобальной переменной или System.property
, чтобы вы могли включить/отключить ее во время выполнения.
Переместите код для доступа к серверу в изолированный класс.
Переопределите этот класс в своих тестах. В тесте просто проверьте правильность текста почты. Если вы получаете сообщение об ошибке, что доступ к серверу не работает, включите "доступ к реальному серверному тесту" и проверьте.
Я бы предложил встроить чистый Java IMAP/POP-сервер в ваш тестовый код.
Для этого у вас есть множество возможностей, в том числе:
Я столкнулся с этим при разработке плагина для Jenkins, и это был сон для использования!
Просто отмените зависимость в своем проекте, и вы готовы к работе (я позволю Kohsuke объясняет, как настроить и использовать его).
Если вы нетерпеливы, вот краткий пример того, как он используется:
// Setup test: add mail to inbox
Mailbox tmp = Mailbox.get("[email protected]");
tmp.add(/* your javax.mail.Message */)
assertEquals 1, tmp.size()
// Connect to the inmemory mailbox using "imap"
Session session = Session.getInstance(System.getProperties(), null);
Store store = session.getStore('imap');
store.connect("bar.com","foo","anything");
// Check the mail exists!
Folder inbox = store.getFolder("INBOX");
inbox.open(Folder.READ_ONLY);
assertEquals 1, inbox.getMessageCount()
store.close();