2012-09-28 32 views
1

我需要用EasyMock模拟一个void函数,这样第一次调用返回一个异常,而下一次成功。使用EasyMock模拟void函数动态行为

例如:

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

但是,这是行不通的。

回答

0

因为第二个expectLastCall()找不到任何调用,所以这不起作用。

你有没有尝试过这样的:

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

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

0

最短的是

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

它假设是没有按”无论该方法在异常之后被调用多次,都无关紧要。如果它的事项,这将是

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

有趣的事实:

  • 你可以连续andReturn
  • 我强烈建议静态导入得到一个更干净的代码
  • anyString用于防止投in String
  • once()不需要,因为它是默认的
  • expectLastCall不是必需的,调用vo id方法足以记录一个没有任何副作用的呼叫(像一个投掷)