当我尝试模拟我的类的私有方法时,我所测试的类的实例对象会有所不同。 我有我的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,这很奇怪。
为什么会这样?
答案 0 :(得分:0)
您没有正确使用JMockit。首先,您不需要使用deencapsulate。 JMockit可以模拟私有方法。其次,在期望中你应该指定依赖类的期望,而不是被测试的类(CUT)。
如果您只想模拟CUT的方法,只需模仿它:
new MockUp<CUT>(){
public Object cutPrivateMethod(Object value){
return fakeValue;
}
};
即使cutPrivateMethod在CUT类中是私有的,也会被嘲笑。