2

我需要使用 EasyMock 模拟一个 void 函数,以便第一次调用返回异常,而下一次调用成功。

例如:

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

但这不起作用。

4

2 回答 2

0

这是行不通的,因为第二个 expectLastCall() 找不到任何呼叫。

你有没有试过这个:

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

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

于 2012-10-04T13:42:17.540 回答
0

最短的是

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

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

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

有趣的事实:

  • 您可以链接并返回
  • 我强烈建议使用静态导入以获得更清晰的代码
  • anyString 用于防止字符串中的强制转换
  • once() 不是必需的,因为它是默认值
  • expectLastCall 不是必需的,调用 void 方法足以记录调用而没有任何副作用(如抛出)
于 2014-07-28T10:53:34.850 回答