1

次のメソッドがあるとします。

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

ここで、ループに入るためにSomeIterator返される Mock オブジェクトを渡したいのですが、ある時点 (たとえば 10 回後など) に返されるようにしたいのですが、PowerMock/ でこれを実現する方法はありますか?イージーモック?Boolean.TRUEBoolean.FALSE

よろしくお願いします。

4

2 に答える 2

5

EasyMock のドキュメントからの抜粋は次のとおりです。

同じメソッド呼び出しの動作の変更

メソッドの変更動作を指定することもできます。メソッド times、andReturn、および andThrow を連鎖させることができます。例として、voteForRemoval("Document") を次のように定義します。

  • 最初の 3 回の呼び出しでは 42 を返します。
  • 次の 4 回の呼び出しで RuntimeException をスローします。
  • -42 を 1 回返します。
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でそれを行う方法は、.andReturnの代わりに.andAnswer()です。

擬似コード:

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