首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模拟javax.mail.Transport

模拟javax.mail.Transport
EN

Stack Overflow用户
提问于 2013-07-04 04:18:58
回答 9查看 11.1K关注 0票数 5

而不用创建另一个我可以注入的类。是否可以模拟javax.mail.Transport,以便在JavaEE7上对Transport.send()方法进行一些模拟测试?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2013-07-04 08:42:41

跟随Bill Shanon的解决方案,因为Dumbster没有当前可用的Maven Central工件,所以我使用了GreenMail。

然后我使用了以下代码:

代码语言:javascript
复制
final GreenMail mailServer = new GreenMail();
mailServer.start();

final Properties mailSessionProperties = new Properties();
mailSessionProperties.put("mail.smtp.port", String.valueOf(mailServer.getSmtp().getPort()));

final javax.mail.Session mailSession = javax.mail.Session.getInstance(mailSessionProperties);

testObject.setMailSession(mailSession);

这样,即使有对Transport.send(message)的静态调用,testObject也不需要更改。

票数 7
EN

Stack Overflow用户

发布于 2015-04-04 01:54:25

如果您想要的是在测试时调用而不是调用Transport.send,那么您可以使用以下代码:

代码语言:javascript
复制
@RunWith(PowerMockRunner.class)
@PrepareForTest(javax.mail.Transport.class)
public class MyClassTest {
    @Before
    public void before() throws Exception {
        suppress(method(Transport.class, "send", Message.class));
    }
}

另请参阅https://groups.google.com/forum/#!topic/powermock/r26PLsrcxyA

票数 2
EN

Stack Overflow用户

发布于 2017-10-20 11:53:32

另一种尚未讨论的方法是将对Transport.send(消息)的调用包装在委托调用的类中。这在你的代码库中有一点开销,但它允许你模拟你的委托类并创建你想要的结果。

代码语言:javascript
复制
public class TransportDelegator {
    public void send(Message msg) throws MessagingException {
        Transport.send(msg)
    }
}

然后模拟TransportDelegator,就像您在使用的任何框架中一样。

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

https://stackoverflow.com/questions/17457386

复制
相关文章

相似问题

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