繁体   English   中英

Mockito在Maven中失败但在Eclipse中取得了成功

[英]Mockito fails in Maven but succeeds in Eclipse

我们在Maven中执行时测试失败,但在Eclipse中成功。

基本上问题是,当使用Maven Mockito执行时,无法模拟来自另一个具有包私有修饰符的maven模块的超类的方法。

问题

  1. 为什么会这样?
  2. 这是一个已知的错误? 如果不在哪里提交? surefire,mockito ......?
  3. 怎么解决?

我找到了类似问题描述,建议修复使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM