我有一个注入了JavaMailSender的服务。我的服务对其进行配置并发送一封邮件。我想截取原始邮件以确保信息是正确的。我想在JUnit中这样做。
你们会怎么做呢?
@Service
public class MyServiceImpl {
@Autowired
private JavaMailSender _mailSender;
public void sendMail(String to, String body, String subject){
...
_mailSender.something
...
}
}发布于 2021-10-26 16:17:39
为了给这个问题添加一个更新的答案,并且2012年的链接博客文章似乎偶尔会关闭,这里有一个完整的示例,使用GreenMail编写与JUnit 5的集成测试(假设您正在为JavaMailSender使用Spring Boot的自动配置)。
首先,确保覆盖邮件服务器的凭据和位置。为此,您可以在src/test/resources中添加一个application.yml文件:
spring:
mail:
password: springboot
username: duke
host: 127.0.0.1
port: 3025 # default protocol port + 3000 as offset
protocol: smtp
test-connection: true接下来,Spring Boot的自动配置将为您的测试配置连接到GreenMail的JavaMailSender。您可以使用GreenMail的JUnit Jupiter扩展来方便地启动/停止GreenMail服务器以进行测试:
<dependency>
<groupId>com.icegreen</groupId>
<artifactId>greenmail-junit5</artifactId>
<version>1.6.1</version>
<scope>test</scope>
</dependency>..。生成以下示例测试:
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class JavaMailSenderIT {
@RegisterExtension
static GreenMailExtension greenMail = new GreenMailExtension(ServerSetupTest.SMTP)
.withConfiguration(GreenMailConfiguration.aConfig().withUser("duke", "springboot"))
.withPerMethodLifecycle(false);
@Autowired
private JavaMailSender javaMailSender;
@Test
void shouldUseGreenMail() throws Exception {
SimpleMailMessage mail = new SimpleMailMessage();
mail.setFrom("admin@spring.io");
mail.setSubject("A new message for you");
mail.setText("Hello GreenMail!");
mail.setTo("test@greenmail.io");
javaMailSender.send(mail);
// awaitility
await().atMost(2, SECONDS).untilAsserted(() -> {
MimeMessage[] receivedMessages = greenMail.getReceivedMessages();
assertEquals(1, receivedMessages.length);
MimeMessage receivedMessage = receivedMessages[0];
assertEquals("Hello GreenMail!", GreenMailUtil.getBody(receivedMessage));
assertEquals(1, receivedMessage.getAllRecipients().length);
assertEquals("test@greenmail.io", receivedMessage.getAllRecipients()[0].toString());
});
}
}您也可以使用use Testcontainers to start a local GreenMail container作为本地沙箱电子邮件服务器。
https://stackoverflow.com/questions/16854993
复制相似问题