有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java允许测试通过set-JMock的模拟方法调用

在JMock2中,当达到给定mock方法调用的执行时,是否有任何方法让测试通过? 换句话说,我想编写一些测试代码,如:

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()'返回值,也不需要模仿后面的任何其他模仿调用

我知道它不会代表任何严格的检查,也不能被视为最佳实践,但当使用一长串成员方法测试方法时,它会很方便


共 (1) 个答案

  1. # 1 楼答案

    给定代码:

    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的任何方法调用