轻松上手:空洞方法
2022-08-31 14:31:38
如果我正确地理解了你想做什么,你应该能够使用:andAnswer()
mockObject.someMethod(eq(param1), eq(param2));
expectLastCall().andAnswer(new IAnswer() {
public Object answer() {
//supply your mock implementation here...
SomeClass arg1 = (SomeClass) getCurrentArguments()[0];
AnotherClass arg2 = (AnotherClass) getCurrentArguments()[1];
arg1.doSomething(blah);
//return the value to be returned by the method (null for void)
return null;
}
});
EasyMock 用户指南解释道:
创建返回值或异常
有时,我们希望模拟对象返回一个值或引发在实际调用时创建的异常。从 EasyMock 2.2 开始,
expectLastCall()
和expect(T value)
返回的对象提供了方法和答案(IAnswer answer
),它允许 [您] 指定用于创建返回值或异常的接口IAnswer
的实现。在
IAnswer
回调中,传递给模拟调用的参数可通过EasyMock.getCurrentArguments() 获得
。如果使用这些参数,则重新排序参数等重构可能会破坏测试。你已被警告。
如果你只是在每次你期望它被调用时调用void方法,然后在调用之前调用,Easymock将“记住”每个调用。EasyMock.expectLastCall()
replay()
因此,我认为您不需要显式调用(除了),因为除了它的调用之外,您不会期望从void方法中获得任何东西。expect()
lastCall
谢谢克里斯!
StackOverflow用户Burt Beckwith的“Fun With EasyMock”是一篇很好的博客文章,提供了更多细节。值得注意的摘录:
基本上,我倾向于使用的流程是:
- 创建模拟
- 每个预期呼叫的呼叫
expect(mock.[method call]).andReturn([result])
- 调用 ,然后对于每个预期的 void 调用
mock.[method call]
EasyMock.expectLastCall()
- 调用以从“录制”模式切换到“播放”模式
replay(mock)
- 根据需要注入模拟
- 调用测试方法
- 呼叫以确保所有预期的呼叫都已发生
verify(mock)