EasyMock 期望与 void 方法

2022-09-01 23:18:13

我正在使用EasyMock进行一些单元测试,我不明白.正如你在下面的代码中看到的,我有一个对象,它的方法返回void,并在其他对象的方法中调用。我认为我必须让EasyMock期望该方法调用,但我尝试注释掉调用,它仍然有效。是因为我通过了,它将其注册为预期呼叫还是发生了其他事情?EasyMock.expectLastCall()expectLastCall()EasyMock.anyObject())

MyObject obj = EasyMock.createMock(MyObject.class);
MySomething something = EasyMock.createMock(MySomething.class);
EasyMock.expect(obj.methodThatReturnsSomething()).andReturn(something);

obj.methodThatReturnsVoid(EasyMock.<String>anyObject());

// whether I comment this out or not, it works
EasyMock.expectLastCall();

EasyMock.replay(obj);

// This method calls the obj.methodThatReturnsVoid()
someOtherObject.method(obj);

EasyMock 的 API 文档是这样说的:expectLastCall()

Returns the expectation setter for the last expected invocation in the current thread. This method is used for expected invocations on void methods.

答案 1

此方法通过 返回期望的句柄;这使您能够验证(断言)您的void方法是否被调用以及相关行为,例如IExpectationSetters

EasyMock.expectLastCall().once();
EasyMock.expectLastCall().atLeastOnce();
EasyMock.expectLastCall().anyTimes();

IExpectationSetters的详细API在这里

在你的示例中,你只是得到句柄,没有对它做任何事情,因此你看不到拥有或删除语句的任何影响。这与你调用一些 getter 方法或声明一些变量而不使用它非常相似。


答案 2

仅当需要进一步验证除“调用该方法。(与设定期望相同)”EasyMock.expectLastCall();

假设您要验证该方法被调用了多少次,以便您将添加以下任何一项:

EasyMock.expectLastCall().once();
EasyMock.expectLastCall().atLeastOnce();
EasyMock.expectLastCall().anyTimes();

或者假设您要引发异常

EasyMock.expectLastCall().andThrow()

如果你不在乎,那么就不是必需的,也没有任何区别,你的陈述就足以建立期望。EasyMock.expectLastCall();"obj.methodThatReturnsVoid(EasyMock.<String>anyObject());"


推荐