[英]Mockito fails in Maven but succeeds in Eclipse
我们在Maven中执行时测试失败,但在Eclipse中成功。
基本上问题是,当使用Maven Mockito执行时,无法模拟来自另一个具有包私有修饰符的maven模块的超类的方法。
问题
我找到了类似问题的描述,建议修复使用surefire-2.7.1而不是2.7.0但我们已经在2.10(并且还看到了2.16中的问题)
显然,最简单的解决方案是将BaseClass公开,但我们不能这样做,因为它不在我们的控制之下。
另一种选择是在MockedClass中覆盖close,这将是丑陋但可能的。
错误消息是
failsCallingOriginalMethod(ModifierTest) Time elapsed: 0.156 sec <<< ERROR!
java.lang.RuntimeException: must not have called me
相关守则
真正的代码不在默认包中,但所有代码都在同一个包中; 为简洁起见删除了import语句。
Maven模块1
public class ModifierTest
{
@Test
public void failsCallingOriginalMethod()
{
MockedClass mock = Mockito.mock(MockedClass.class);
doNothing().when(mock).close();
}
}
Maven模块2
public class MockedClass extends BaseClass
{
}
class BaseClass
{
public void close()
{
throw new RuntimeException("must not have called me");
}
}
涉及的东西的版本
Maven版本3.0.5(由于其他错误,无法更改)
Oracle JDK 1.6.0_20(可与IBM JDK 1.5一起重现)
Mockito 1.95
surefire插件2.10(可重现2.16)
你能掌控MockedClass
吗?
如果是这样,您可以考虑在MockedClass中添加委托方法:
public void close() {
super.close();
}
这并不能解决问题,但这是一个快速的解决方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.