Тестирование на отправленную электронную почту - 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, кажется, проживает здесь в эти дни:

https://github.com/greenmail-mail-test/greenmail

Другие вопросы по тегам