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

时间:2013-10-23 08:28:02

标签: java eclipse maven mockito surefire

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

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

问题

  1. 为什么会这样?
  2. 这是一个已知的错误吗?如果不在哪里提交? surefire,mockito ......?
  3. 如何解决?
  4. 我找到了一个description of a similar problem,建议修复使用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
    

    相关代码

    真正的代码不在默认包中,但所有代码都在同一个包中;为简洁起见删除了导入语句。

    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)

1 个答案:

答案 0 :(得分:1)

您是否可以控制MockedClass

如果是这样,你可以考虑在MockedClass中添加一个委托方法:

public void close() {
    super.close();
}

这不能解决问题,但这是一个快速的解决方法。

相关问题