我希望模拟一个支持类的静态方法,为了做到这一点,我需要使用jmockit模拟被测类的方法。在下面的例子中,我想模拟cancontinue方法,以便始终进入if条件。我还需要模拟静态方法并验证之后发生的所有事情。
public class UnitToTest {
public void execute() {
Foo foo = //
Bar bar = //
if (canContinue(foo, bar)) {
Support.runStaticMethod(f);
// Do other stuff here that I would like to verify
}
}
public boolean canContinue(Foo f, Bar b) {
//Logic which returns boolean
}
}
我的测试方法如下:
@Test
public void testExecuteMethod() {
// I would expect any invocations of the canContinue method to
// always return true for the duration of the test
new NonStrictExpectations(classToTest) {{
invoke(classToTest, "canContinue" , new Foo(), new Bar());
result = true;
}};
// I would assume that all invocations of the static method
// runStaticMethod return true for the duration of the test
new NonStrictExpectations(Support.class) {{
Support.runStaticMethod(new Foo());
result = true;
}};
new UnitToTest().execute();
//Verify change in state after running execute() method
}
我做错什么了?将cancontinue方法的第一个期望值更改为返回false不会影响代码的执行是否进入if条件。
1条答案
按热度按时间3gtaxfhh1#
你在嘲笑一个例子(
classToTest
),然后再进行一次锻炼(new UnitToTest().execute()
)不被嘲笑;这是一个错误。另外,测试不应该使用
invoke(..."canContinue"...)
,自从canContinue
方法是public
. 但实际上,这种方法根本不应该被嘲笑;测试应该准备好任何需要的状态,以便canContinue(foo, bar)
返回所需的值。