Проверьте, успешно ли отправлено письмо с использованием Java - PullRequest
0 голосов
/ 13 июня 2019

У меня есть служба рассылки, которая отправляет почту:

@Component
public class MailingServiceImpl implements MailingService{

    @Autowired
    JavaMailSenderImpl mailSender;

    @Override
    public void sendMail(String sender, String receiver, String subject, String content) {

        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(sender);
        message.setTo(receiver);
        message.setSubject(subject);
        message.setText(content);
        mailSender.send(message);
    }
}

, и я пишу тест для этого void sendMail(...), и мне нужно проверить, было ли письмо успешно отправлено.Я нашел GreenMail, который я сейчас пытаюсь использовать для своего теста, вот код:

public class MailingServiceImplTest {

    private MailingServiceImpl mailingServiceImpl;

    @Autowired
    private JavaMailSenderImpl mailSender;

    @PostConstruct
    public void testConnection() {
        try {
            mailSender.testConnection();
        } catch(MessagingException ex) {
            throw new IllegalStateException("[Warning] Mail server is not available. " + ex);
        }
    }

    @Rule
    public final GreenMailRule greenMail = new GreenMailRule(ServerSetupTest.SMTP);

    @Test
    public void testSendMail() throws IOException {
        GreenMailUtil.sendTextEmailTest(receiver, sender, subject, content);
        // GreenMailUtil.sendTextEmailTest(to, from, subject, body);  -- here I could use the GreenMailUtil sendTextEmailTest, but I need to use my void sendMail function
        MimeMessage[] emails = greenMail.getReceivedMessages();
//      assertEquals(1, emails.length);
    }

Есть идеи, как проверить мой метод?GreenMail (например, пример раздел «Использование JUint (настройка на основе правил)») - не единственный инструмент, который я пробовал, пробовал Dumbster (как пример ниже, но sendMessage требуются строки в качестве параметров, я не могу передать свой метод. Я делаю что-то не так?недавно обнаружил в отладке, что @Autowired MailingServiceImpl это null .. но почему? Я не очень понимаю.

1 Ответ

0 голосов
/ 13 июня 2019

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

@Autowired
private MailingServiceImpl mailingServiceImpl;

@Rule
public final GreenMailRule greenMail = new GreenMailRule(ServerSetupTest.SMTP);

@Test
public void testSendMail() throws IOException {
    mailingServiceImpl.sendMail("sender", "receiver", "subject", "content");
    MimeMessage[] emails = greenMail.getReceivedMessages();
    assertEquals(1, emails.length);
}

Конечно, ваш JavaMailSender должен быть правильно настроен для использования вашей локальной службы GreenMail-SMTP, и, конечно, ваши настройки весеннего теста должны быть правильными (при условии, что вы хотите использовать пружину).

При использовании весенней загрузки такой конфигурации должно быть достаточно:

spring.mail.host=localhost
spring.mail.port=3025 #Default port of greenmail?!
...