假设我有以下方法:
public void runLoop(SomeIterator it){
while(it.hasNext()){
//do something
}
}
现在我想传入一个SomeIterator
Mock对象,该对象将返回Boolean.TRUE
以进入循环,但我也希望它在某个时刻返回Boolean.FALSE
(比如说)例如,在10次之后,有没有办法通过PowerMock / EasyMock实现这一目标?
提前感谢您的帮助。
答案 0 :(得分:5)
更改同一方法调用的行为
还可以为方法指定更改行为。该 方法times,andReturn和andThrow可能会被链接。举个例子, 我们将voteForRemoval(“Document”)定义为
- 前三次通话返回42,
- 为接下来的四个调用抛出RuntimeException
- 返回-42一次。
expect(mock.voteForRemoval("Document"))
.andReturn((byte) 42).times(3)
.andThrow(new RuntimeException(), 4)
.andReturn((byte) -42);
答案 1 :(得分:1)
我不太了解powermock,但使用easymock的方法是.andAnswer()而不是.andReturn在你的模拟器上。
伪代码:
it.hasNext();
expectLastCall().anyTimes().andAnswer(
new IAnswer<Boolean>(){ compute your return value }
);