让测试通过一组 JMock 的模拟方法调用
Let a test pass on a set JMock's mock method call
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()'
return 值以及要跟随的任何其他模拟调用?
我知道它不会代表任何严格的检查,也不能被认为是最佳实践,但在使用一长串成员方法测试方法时它会派上用场。
给出的代码:
public void methodUnderTest(){
request.foo();
anInstance.bar();
yetAnotherInstance.baz();
}
一旦 foo()
被调用,您就不能跳过 bar()
和 baz()
的执行。我还要说你不想这样做,因为即使你可以在测试中跳过它,它仍然会在生产中执行,所以你最好也测试一下:-)
你能做的最接近的事情是
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
上的任何方法调用。
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()'
return 值以及要跟随的任何其他模拟调用?
我知道它不会代表任何严格的检查,也不能被认为是最佳实践,但在使用一长串成员方法测试方法时它会派上用场。
给出的代码:
public void methodUnderTest(){
request.foo();
anInstance.bar();
yetAnotherInstance.baz();
}
一旦 foo()
被调用,您就不能跳过 bar()
和 baz()
的执行。我还要说你不想这样做,因为即使你可以在测试中跳过它,它仍然会在生产中执行,所以你最好也测试一下:-)
你能做的最接近的事情是
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
上的任何方法调用。