在达到给定模拟的方法调用的执行时,JMock2中是否有任何方法可以让测试通过? 换句话说,我想编写一些测试代码,例如:
assertTrue(when(aRequestMock).methodCall());
要测试生产代码,例如:
public void methodUnderTest(){
// Some initialization code and members call
request.foo();
String a = anotherInstance.bar();
// many more calls to follow
}
...所以我不需要模拟'anotherInstance.bar()'
的返回值以及要跟随的其他模拟调用?
我知道这并不代表任何严格的检查,也不能被认为是最佳实践,但是在测试带有大量成员方法的方法时,它将很方便。
答案 0 :(得分:2)
给出代码:
public void methodUnderTest(){
request.foo();
anInstance.bar();
yetAnotherInstance.baz();
}
一旦调用bar()
,就不能跳过baz()
和foo()
的执行。让我也说您不想这样做,因为即使您可以在测试中跳过它,它也将在生产中执行,所以您最好也对其进行测试:-)
您能做的最近的事情是
context.checking(new Expectations() {{
oneOf(requestMock).foo();
ignoring(anInstanceMock).bar();
ignoring(yetAnotherInstanceMock).baz();
}});
我在第一行使用oneOf()
是因为foo()
是测试的重点。您也可以通过不提及bar()
和baz()
来简化此操作:
context.checking(new Expectations() {{
oneOf(requestMock).foo();
ignoring(anInstanceMock);
ignoring(yetAnotherInstanceMock);
}});
但是请记住,这样做将忽略对anInstanceMock
和yetAnotherInstanceMock
的任何方法调用。