【问题标题】:Let a test pass on a set JMock's mock method call让测试通过一组 JMock 的模拟方法调用
【发布时间】:2019-06-06 14:41:41
【问题描述】:

在 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()' 返回值以及任何其他要遵循的模拟调用?

我知道这并不代表任何严格的检查,也不能被认为是最佳实践,但在使用一长串成员方法测试方法时它会派上用场。

【问题讨论】:

    标签: java unit-testing testing jmock


    【解决方案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 上的任何方法调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多