繁体   English   中英

动态更改模拟对象的返回值

[英]Change mock object return value dynamically

假设我有以下方法:

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

现在我想传递一个SomeIterator Mock对象,该对象将返回Boolean.TRUE以便进入循环,但是我也希望它在某个时候返回Boolean.FALSE (例如,经过10次),有没有办法使用PowerMock / EasyMock实现这一目标?

在此先感谢您的帮助。

这是EasyMock文档的摘录:

更改同一方法调用的行为

也可以为方法指定变化的行为。 方法time和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 on模拟。

伪代码:

it.hasNext();
expectLastCall().anyTimes().andAnswer(
    new IAnswer<Boolean>(){ compute your return value }
);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM