mar*_*tin 10 java email mockito
我需要在单元测试中模拟一个javax.mail.Session对象.类javax.mail.Session标记为final,因此Mockito无法创建模拟.有谁知道如何解决这个问题?
编辑:我的测试是一个Arquillian测试,并且已经有一个注释@RunWith(Arquillian.class).因此,powermock不是一种选择.
您可以稍微重构一下代码.在Martin Fowler的"使用遗留代码"一书中,他描述了一种将外部API(想想Java Mail API)与您自己的应用程序代码分离的技术.这项技术被称为"包裹和皮肤",非常简单.
你应该做的只是:
快乐的测试!
编辑:另请看这篇博文:http://www.mhaller.de/archives/18-How-to-mock-a-thirdparty-final-class.html
使用PowerMockito来模拟它.
@RunWith(PowerMockRunner.class)
// We prepare PartialMockClass for test because it's final or we need to mock private or static methods
@PrepareForTest(javax.mail.Session.class)
public class YourTestCase {
@Test
public void test() throws Exception {
PowerMockito.doReturn(value).when(classUnderTest, "methodToMock", "parameter1");
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用Mock JavaMail项目。我首先从川口浩辅找到它。艾伦·弗兰佐尼(Alan Franzoni)在他的博客上也有入门介绍。
当您将此jar文件放在类路径中时,它将替换任何将邮件发送到可以立即检查的内存邮箱中的操作。超级好用。
诚然,将其添加到类路径是模拟某些事情的繁重方式,但是无论如何,您很少希望在自动化测试中发送真实的电子邮件。