使用jmockit

时间:2015-06-17 12:37:00

标签: java junit4 jmockit

当我尝试模拟我的类的私有方法时,我所测试的类的实例对象会有所不同。 我有我的CUT的对象,我在@Before安装方法

中初始化
@Before
public void setUp() {
    cutInstance = new CUT();

在我的测试方法中,我通过创建CUT的本地对象来模拟CUT

@Test
public void test_someMethod(@Mocked CUT cutInstanceLocal)

然后使用Expectations API模拟私有CUT方法

new Expectations(cutInstanceLocal) {{
    Deencapsulation.invoke(cutInstanceLocal, "cutPrivateMethod", value);
    result = fakeValue;
}};

现在测试cutMethod(param),它将在内部调用mocked方法。

现在正在测试中,有时我将param的值视为null,这很奇怪。

为什么会这样?

1 个答案:

答案 0 :(得分:0)

您没有正确使用JMockit。首先,您不需要使用deencapsulate。 JMockit可以模拟私有方法。其次,在期望中你应该指定依赖类的期望,而不是被测试的类(CUT)。

如果您只想模拟CUT的方法,只需模仿它:

new MockUp<CUT>(){
      public Object cutPrivateMethod(Object value){
         return fakeValue;
      }
};

即使cutPrivateMethod在CUT类中是私有的,也会被嘲笑。