1

假设我有以下方法:

public void runLoop(SomeIterator it){
    while(it.hasNext()){
        //do something
    }
}

现在我想传入一个SomeIteratorMock 对象,该对象将返回Boolean.TRUE以进入循环,但我也希望它Boolean.FALSE在某个时候返回(例如在 10 次之后),有没有办法通过 PowerMock/ 实现这一点易模?

在此先感谢您的帮助。

4

2 回答 2

5

这是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);
于 2012-05-18T16:18:24.033 回答
1

我不太了解 powermock,但是使用 easymock 的方法是 .andAnswer() 而不是 .andReturn 在你的模拟中。

伪代码:

it.hasNext();
expectLastCall().anyTimes().andAnswer(
    new IAnswer<Boolean>(){ compute your return value }
);
于 2012-05-18T16:22:43.177 回答