2013-10-23 115 views
3

我们当Maven的执行的测试失败至极,但在Eclipse成功。失败的Mockito在Maven的成功,但在Eclipse

基本上问题是,当与Maven执行的Mockito失败嘲笑它来源于从与包专用改性剂的另一行家模块类的超类的方法。

问题

  1. 为什么会这样呢?
  2. 这是一个已知的bug?如果没有在哪里文件呢?肯定,mockito ...?
  3. 如何解决呢?

我已经找到了description of a similar problem,与推荐修复使用万无一失-2.7.1,而不是2.7.0,但我们已经在2.10(也见2.16这个问题)

显然是最简单解决办法是让公众BaseClass的,但我们不能这样做,因为它不是我们的控制之下。

另一种方法是,以覆盖接近MockedClass,这将是难看但可能的。

的错误消息是

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(不能改变,因到其他bug)

的Oracle JDK 1.6.0_20(可重放与IBM JDK 1.5)

1.95的Mockito

保命插件2.10(可重放2.16)

回答

1

你有超过MockedClass控制?

如果是的话,你可以考虑在MockedClass增加一个委托方法:

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

这并没有解决问题,但它是一个快速的解决方法。

相关问题