首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >测试已发送的电子邮件- Dumbster和greenmail未捕获已发送的JavaMail

测试已发送的电子邮件- Dumbster和greenmail未捕获已发送的JavaMail
EN

Stack Overflow用户
提问于 2012-10-02 15:08:29
回答 2查看 5.7K关注 0票数 0

我正在尝试集成Dumbster来测试我们基于JavaMail的对外发送电子邮件的通知程序。电子邮件被发送了,但在我的测试中,Dumbster没有接收到它们。我不确定是否需要额外的配置才能使其工作,但在dumbster主页上显示,它将自动侦听通过端口25上的smtp发送的邮件。

这是我们的java邮件设置:

代码语言:javascript
复制
<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:

代码语言:javascript
复制
@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);
    }

正如他们在他们的页面上演示的那样,测试非常简单:

代码语言:javascript
复制
@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);
}

正如我所说的,邮件发送了,但是断言失败了。

有什么想法吗?

顺便说一句:我也尝试过Greenmail,但结果是一样的:

maven略有不同:

代码语言:javascript
复制
    <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>

测试

代码语言:javascript
复制
    GreenMail greenMail = new GreenMail(); //uses test ports by default
    greenMail.start();
    // send mail
    Assert.assertEquals("subject", greenMail.getReceivedMessages()[0].getSubject());
    greenMail.stop();
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-02 15:33:34

测试失败,因为配置是“将邮件发送到SMTP服务器smtp.somewhere.com”,但您想要将它发送到在localhost上运行的SimpleSmtpServer

使用mailSender bean的host参数的系统属性,并在运行测试时将其设置为localhost

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

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

这将加速您的单元测试,并消除许多不必要的依赖项,这些依赖项可能会导致测试失败,即使您的代码工作正常。

票数 3
EN

Stack Overflow用户

发布于 2016-07-27 08:25:22

注意:似乎有较新版本的Dumbster (不能从原始源代码获得)可能已经修复了您遇到的挂起错误:

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

https://github.com/rjo1970/dumbster

git-wip-us.apache.org/repos/asf?p=logging-log4j2.git;a=commit;h=b0f7be4b0666dca22205e6df5c7374677daa416e

这些天来,Greenmail似乎就在这里:

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12685865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档