I have a service that has injected the JavaMailSender. My service configures it and sends a mail. I'd like to intercept the raw mail to ensure the information is the correct. I'd like to do that in a JUnit.
How would you guys do that?
@Service
public class MyServiceImpl {
    @Autowired
    private JavaMailSender _mailSender;
    public void sendMail(String to, String body, String subject){
        ...
        _mailSender.something
        ...
    }
}
I've done it using GreenMail. Take a look at my blog post about it where you'll also find a working example.
You can use a test SMTP server, like Dumbster. See the example below:
@Test
    public void sendSimpleEmailWithCC() {
        // Runs a Dumbster simple SMTP server - default config
        SimpleSmtpServer server = SimpleSmtpServer.start();
        String from = "[email protected]";
        String to = "[email protected]";
        String messageText = "Good message";
        String title = "Test message";
        String cc = "[email protected]";
        Assert.assertTrue(mailSender
                .sendEmail(from, to, cc, title, messageText));
        server.stop();
        Assert.assertTrue(server.getReceivedEmailSize() == 1);
        Iterator emailIter = server.getReceivedEmail();
        SmtpMessage email = (SmtpMessage) emailIter.next();
        Assert.assertTrue(email.getHeaderValue("From").equals(from));
        Assert.assertTrue(email.getHeaderValue("To").equals(to));
        Assert.assertTrue(email.getHeaderValue("Cc").equals(cc));
        Assert.assertTrue(email.getHeaderValue("Subject")
                .equals("Test message"));
        Assert.assertTrue(email.getBody().equals(messageText));
    }
If your goal is to use just Junit/Mockito and test how MimeMessage was formed before sending then the configuration below should be sufficient:
public class EmailServiceTest {
    private EmailServiceImpl emailServiceImpl;
    private JavaMailSender javaMailSender;
    private MimeMessage mimeMessage;
    @Before
    public void before() {
        mimeMessage = new MimeMessage((Session)null);
        javaMailSender = mock(JavaMailSender.class);
        when(javaMailSender.createMimeMessage()).thenReturn(mimeMessage);
        emailServiceImpl = new EmailService(javaMailSender);
    }
    @Test
    public void emailTest() {
        String recipient = "[email protected]"
        EmailRequest request = new EmailRequest();
        request.setRecipient(recipient);
        emailServiceImpl.send(request);
        assertEquals(recipient, mimeMessage.getRecipients(RecipientType.TO)[0].toString());
    }
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With