我有一个注入了JavaMailSender的服务。我的服务对其进行配置并发送一封邮件。我想截取原始邮件以确保信息是正确的。我想在JUnit中这样做。
你们会怎么做呢?
@Service
public class MyServiceImpl {
@Autowired
private JavaMailSender _mailSender;
public void sendMail(String to, String body, String subject){
...
_mailSender.something
...
}
}发布于 2013-05-31 18:23:29
我已经使用GreenMail做到了这一点。看一看my blog post about it,在那里您还可以找到一个可用的示例。
发布于 2013-05-31 19:12:27
您可以使用测试SMTP服务器,如Dumbster。如下例所示:
@Test
public void sendSimpleEmailWithCC() {
// Runs a Dumbster simple SMTP server - default config
SimpleSmtpServer server = SimpleSmtpServer.start();
String from = "whoever@from.com";
String to = "whoever@to.com";
String messageText = "Good message";
String title = "Test message";
String cc = "whoever@cc.com";
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));
}发布于 2019-02-23 08:12:23
如果你的目标是只使用Junit/Mockito,并在发送之前测试MimeMessage是如何形成的,那么下面的配置应该足够了:
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 = "example@example.com"
EmailRequest request = new EmailRequest();
request.setRecipient(recipient);
emailServiceImpl.send(request);
assertEquals(recipient, mimeMessage.getRecipients(RecipientType.TO)[0].toString());
}
}https://stackoverflow.com/questions/16854993
复制相似问题