我想在春季测试我的服务,它应该发送电子邮件。 我尝试使用org.subethamail:subethasmtp
。在春季测试发送邮件
要acieve我的目标,我创建服务MySender
在那里我发送电子邮件:
@Autowired
private MailSender mailSender;
//...
SimpleMailMessage message = new SimpleMailMessage();
message.setTo("[email protected]");
message.setSubject("Subject");
message.setText("Text");
mailSender.send(message);
// ...
为了测试这一块我创建的测试application.properties
(测试范围)代码:
spring.mail.host=127.0.0.1
spring.mail.port=${random.int[4000,6000]}
和测试配置应启动Wiser SMTP服务器并使其在测试中可重复使用的类:
@Configuration
public class TestConfiguration {
@Autowired
private Wiser wiser;
@Value("${spring.mail.host}")
String smtpHost;
@Value("${spring.mail.port}")
int smtpPort;
@Bean
public Wiser provideWiser() {
// provide wiser for verification in tests
Wiser wiser = new Wiser();
return wiser;
}
@PostConstruct
public void initializeMailServer() {
// start server
wiser.setHostname(smtpHost);
wiser.setPort(smtpPort);
wiser.start();
}
@PreDestroy
public void shutdownMailServer() {
// stop server
wiser.stop();
}
}
预期结果是应用程序使用Wiser smtp服务器发送电子邮件并验证发送邮件的数量。
但是当我运行服务应用程序抛出MailSendException(Couldn't connect to host, port: 127.0.0.1, 4688; timeout -1;)
。 但是,当我添加断点并尝试连接使用telnet smtp服务器允许连接,并不抛出Connection refused
。
你知道为什么我无法测试发送邮件吗?
的完整代码预览可以在GitHub上: https://github.com/karolrynio/demo-mail
在猜测,明智的服务器不是测试执行开始时完成。在运行测试之前,您可能需要在'@ Before'中执行某些操作以确保套接字处于活动状态。 – Taylor
我不确定,因为在日志中我有信息,服务器在测试日志之前启动,但我尝试在运行测试之前等待服务器启动。 – krynio
我发现错误。我的问题的原因是配置。 Line:spring.mail.port = $ {random.int [4000,6000]},因为spring将2个不同的值注入到bean中。 Bean MailSender具有与Wiser不同的端口值。谢谢你的帮助。 – krynio