【问题标题】:Correct use of expectLastCall().once() in EasyMock在 EasyMock 中正确使用 expectLastCall().once()
【发布时间】:2013-02-21 06:34:28
【问题描述】:

我正在为特定方法编写一个 junit 测试。该方法包含对我正在使用 EasyMock 模拟的 DAO 类中的其他方法的调用。

我想断言这些 DAO 类方法之一被调用一次,这就是我假设 expectLastCall().once() 的用途。有问题的方法返回 void。

我目前的测试通过了,我只是想确保我的逻辑是正确的,因为我之前没有使用过 EasyMock。我用这个问题作为参考:EasyMock expectations with void methods

所以,这里是代码:

    @Before
    public void setUp() throws Exception{
    this.fooService = new FooService();
    this.fooMock = createStrictMock(FooDAO.class);
    }

    @Test
    public void test_fooTest(){

    String arg1 = "arg1";
    String arg2 = "arg2";
    this.fooService.setFooDAO(fooMock);
    expect(this.fooMock.someMethod(arg1, arg2)).andReturn(something);
    fooMock.methodThatShouldBeCalledOnce(EasyMock.<Object>anyObject());
    EasyMock.expectLastCall().once();
    replay(this.fooMock);
    this.fooService.methodUnderTest(someArg, someArg2);
    verify(this.fooMock);

    }

我认为这样做是断言有一个对 methodThatShouldBeCalledOnce 的调用并且它只发生一次。我并不真正关心 someMethod 但如果没有告诉它期待它,EasyMock 当然会抱怨。

谢谢!

【问题讨论】:

    标签: unit-testing junit easymock


    【解决方案1】:

    这对我来说是正确的。您可以通过删除对 void 方法的调用并验证测试是否失败,或者通过添加对 void 方法的第二次调用并查看测试是否也失败来轻松地自行检查。

    【讨论】:

      【解决方案2】:

      如果您不关心某些方法,则应该创建一个不错的模拟。那么,确实没有必要调用expectLastCall。它是隐含的,但可以是一个很好的做法,可以让你很明显你在模拟一个方法。 once() 也不需要,因为它是默认值。

      所以,如果改写它,使用漂亮的米克,删除隐式调用,添加静态导入而不添加多余的“this”,你应该得到:

      @Before
      public void setUp() throws Exception{
         fooService = new FooService();
         fooMock = createNiceMock(FooDAO.class);
         fooService.setFooDAO(fooMock);
      }
      
      @Test
      public void test_fooTest(){  
         fooMock.methodThatShouldBeCalledOnce(anyObject());
      
         replay(fooMock); // or replayAll() if you extend EasyMockSupport
      
         fooService.methodUnderTest(someArg, someArg2);
         verify(fooMock); // or verifyAll() if you extend EasyMockSupport
      }
      

      【讨论】:

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