使用具有动态行为的EasyMock模拟void函数

时间:2012-09-28 18:49:12

标签: testing easymock

我需要使用EasyMock模拟一个void函数,这样第一个调用会返回一个Exception,而下一个调用会成功。

例如:

this.myObject.move((String) EasyMock.anyObject());
EasyMock.expectLastCall().once().andThrow(new RetryableDependencyException());
EasyMock.expectLastCall().once();

但这不起作用。

2 个答案:

答案 0 :(得分:0)

这不会起作用,因为第二个expectLastCall()无法找到任何电话。

你试过这个:

this.myObject.move((String) EasyMock.anyObject());
EasyMock.expectLastCall().once().andThrow(new RetryableDependencyException());
this.myObject.move((String) EasyMock.anyObject());
EasyMock.expectLastCall().once();

我知道它有点冗长,但它应该让你排序:)

答案 1 :(得分:0)

最短的是

myObject.move(anyString());
expectLastCall().andThrow(new RetryableDependencyException()).asStub();

假设在异常后多次调用该方法并不重要。如果重要,那将是

myObject.move(anyString());
expectLastCall().andThrow(new RetryableDependencyException());
myObject.move(anyString());

有趣的事实:

  • 您可以链接和返回
  • 我强烈建议静态导入以获得更清晰的代码
  • anyString用于阻止String
  • 中的强制转换
  • 一次()不是必需的,因为它是默认的
  • expectLastCall不是必需的,调用void方法就足以记录一个没有任何副作用的调用(如throw)