Тестирование на отправленную электронную почту - Dumbster и greenmail не ловят отправленную JavaMail
Я пытаюсь интегрировать Dumbster для тестирования нашего уведомителя на основе JavaMail для исходящих писем. Письма отправляются, но в моем тесте Dumbster их не получает. Я не уверен, что мне понадобится дополнительная настройка, чтобы сделать эту работу, но на домашней странице dumbster он говорит, что он будет автоматически прослушивать почту, отправленную через smtp через порт 25.
Это наша настройка Java-почты:
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="smtp.somewhere.com" />
<property name="port" value="25" />
<property name="username" value="theUserName" />
<property name="password" value="thePassword" />
<property name="javaMailProperties">
<props>
<prop key="mail.smtp.auth">true</prop>
<prop key="mail.smtp.starttls.enable">true</prop>
</props>
</property>
</bean>
Наш класс Mailer просто внедряет JavaMailer:
@Component
public class OurMailer {
@Inject
private MailSender mailSender;
public void sendMail(String from, String to, String subject, String msg) {
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(from);
message.setTo(to);
message.setSubject(subject);
message.setText(msg);
mailSender.send(message);
}
Тест довольно прост, как они демонстрируют на своей странице:
@Inject
private OurMailer ourMailer;
@Test
public void ourMailer_should_send_mail() {
SimpleSmtpServer server = SimpleSmtpServer.start();
ourMailer.sendMail(FROM_EMAIL, TO_EMAIL, SUBJECT, MESSAGE);
server.stop();
Assert.assertTrue(server.getReceivedEmailSize() == 1);
}
Как я уже сказал, почта отправляется, но Assert не удается.
Есть идеи?
Кстати, я также попробовал Greenmail, но с тем же результатом:
мавен немного отличается:
<dependency>
<groupId>com.icegreen</groupId>
<artifactId>greenmail</artifactId>
<version>1.3.1b</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
Тест
GreenMail greenMail = new GreenMail(); //uses test ports by default
greenMail.start();
// send mail
Assert.assertEquals("subject", greenMail.getReceivedMessages()[0].getSubject());
greenMail.stop();
2 ответа
Тест не пройден, потому что в конфиге написано "Отправить почту на SMTP-сервер smtp.somewhere.com
"но вы хотите отправить его на SimpleSmtpServer
который работает на localhost
Используйте системное свойство для host
параметр mailSender
боб и установите его localhost
когда вы запускаете тест.
Тем не менее, я предлагаю разделить тест на две части. Первый тест должен просто убедиться, что метод вызывается с правильными параметрами. Таким образом, вы будете знать, что код пытается отправить почту в нужное время; нет смысла тестировать SMTP-аутентификацию, ваш почтовый сервер, почтовую инфраструктуру и сеть в модульном тесте - все они протестированы их соответствующими производителями.
Второй тест должен проверить только метод sendMail()
метод. Поместите этот тест в набор тестов, который можно запустить вручную. Здесь вы хотите знать, правильно ли вы настроили и используете MailSender
API. Если вы не измените код в sendMail()
метод, вам не нужно запускать этот тест вообще.
Это ускорит ваш модульный тест и избавит от многих ненужных зависимостей, которые могут привести к сбою теста, даже если ваш код работает правильно.
Примечание. Похоже, что существуют более новые версии Dumbster (недоступные из оригинального источника), которые могли исправить ошибки зависания, с которыми вы столкнулись:
sourceforge.net/p/dumbster/patches/9/
https://github.com/rjo1970/dumbster
git-wip-us.apache.org/repos/asf?p=logging-log4j2.git;a=commit;h=b0f7be4b0666dca22205e6df5c7374677daa416e
И Greenmail, кажется, проживает здесь в эти дни: