假设我有以下方法:
public void runLoop(SomeIterator it){
while(it.hasNext()){
//do something
}
}
现在我想传入一个SomeIterator
Mock 对象,该对象将返回Boolean.TRUE
以进入循环,但我也希望它Boolean.FALSE
在某个时候返回(例如在 10 次之后),有没有办法通过 PowerMock/ 实现这一点易模?
在此先感谢您的帮助。
这是EasyMock 文档的摘录:
更改同一方法调用的行为
也可以为方法指定变化的行为。方法times、andReturn 和andThrow 可以被链接。例如,我们将 voteForRemoval("Document") 定义为
- 前三个调用返回 42,
- 为接下来的四个调用抛出 RuntimeException,
- 返回 -42 一次。
expect(mock.voteForRemoval("Document"))
.andReturn((byte) 42).times(3)
.andThrow(new RuntimeException(), 4)
.andReturn((byte) -42);
我不太了解 powermock,但是使用 easymock 的方法是 .andAnswer() 而不是 .andReturn 在你的模拟中。
伪代码:
it.hasNext();
expectLastCall().anyTimes().andAnswer(
new IAnswer<Boolean>(){ compute your return value }
);