让测试通过一组 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);
}});

但是,请记住,这样做会忽略 anInstanceMockyetAnotherInstanceMock 上的任何方法调用。