测试已发送的Dubster和greenmail未捕获已发送的JavaMail



我正在尝试集成Dubster来测试我们基于JavaMail的传出电子邮件通知程序。电子邮件被发送了,但在我的测试中,Dubster没有收到它们。我不确定我是否需要额外的配置来实现这一点,但在dubster主页上,它会自动监听通过端口25上的smtp发送的邮件。

这是我们的java邮件设置:

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="smtp.somewhere.com" />
<property name="port" value="25" />
<property name="username" value="theUserName" />
<property name="password" value="thePassword" />
<property name="javaMailProperties">
<props>
<prop key="mail.smtp.auth">true</prop>
<prop key="mail.smtp.starttls.enable">true</prop>
</props>
</property>
</bean>

我们的Mailer类只是注入了JavaMailer:

@Component
public class OurMailer {
@Inject
private MailSender mailSender;
public void sendMail(String from, String to, String subject, String msg) {
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(from);
message.setTo(to);
message.setSubject(subject);
message.setText(msg);
mailSender.send(message);
}

正如他们在自己的页面上展示的那样,测试是非常直接的:

@Inject
private OurMailer ourMailer;
@Test
public void ourMailer_should_send_mail() {
SimpleSmtpServer server = SimpleSmtpServer.start();
ourMailer.sendMail(FROM_EMAIL, TO_EMAIL, SUBJECT, MESSAGE);
server.stop();
Assert.assertTrue(server.getReceivedEmailSize() == 1);
}

正如我所说,邮件被发送,但是Assert失败了。

有什么想法吗?

BTW:我也尝试过Greenmail,但结果相同:

maven略有不同:

<dependency>
<groupId>com.icegreen</groupId>
<artifactId>greenmail</artifactId>
<version>1.3.1b</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>

测试

GreenMail greenMail = new GreenMail(); //uses test ports by default
greenMail.start();
// send mail
Assert.assertEquals("subject", greenMail.getReceivedMessages()[0].getSubject());
greenMail.stop();

测试失败,因为配置显示"将邮件发送到SMTP服务器smtp.somewhere.com",但您希望将其发送到运行在localhost上的SimpleSmtpServer

mailSenderbean的host参数使用System属性,并在运行测试时将其设置为localhost

也就是说,我建议把测试一分为二。第一个测试应该只确保使用正确的参数调用该方法。这样你就会知道代码试图在正确的时间发送邮件;在单元测试中测试SMTP身份验证、邮件服务器、邮件基础设施和网络没有什么意义——所有这些都由各自的制造商进行测试。

第二个测试应该只测试方法sendMail()方法。将该测试放入一个可以手动运行的测试套件中。这里您想知道的是您是否正确设置和使用了MailSenderAPI。除非您更改sendMail()方法中的代码,否则根本不必运行此测试。

这将加快单元测试的速度,并消除许多不必要的依赖关系,即使代码工作正常,这些依赖关系也会导致测试失败。

注意:似乎有更新版本的Dubster(无法从原始来源获得)可能已经修复了您遇到的挂起错误:

sourceforge.net/p/dumbster/patches/9/

https://github.com/rjo1970/dumbster

git-wip-us.apache.org/repos/asf?p=logging-log4j2.git;a=提交;h=b0f7be4b0666dca22205e6df5c7374677da416e

Greenmail最近似乎住在这里:

https://github.com/greenmail-mail-test/greenmail

最新更新