連続した呼び出しで異なる戻り値を許可するFakeItEasyを使用して偽物を作成するにはどうすればよいですか。これは私がやりたいことの一例です。
var enumerator = A.Fake<IDictionaryEnumerator>();
A.CallTo(() => enumerator.MoveNext()).Returns(true); //Expected value for first call
A.CallTo(() => enumerator.Key).Returns("key1");
A.CallTo(() => enumerator.Value).Returns("value1");
A.CallTo(() => enumerator.MoveNext()).Returns(false); //Expected value for second call
Assert.IsTrue(enumerator.MoveNext()); //Fails
Assert.IsFalse(enumerator.MoveNext());
MoveNextの最後の設定が最初の設定を上書きするため、アサーションは失敗します。
FakeItEasyでやりたいことをすることは可能ですか?
。
[編集]
元の質問の例を明確にし、以下の実用的な例を提供しました。
Patrikの回答に基づいて、このコードは偽物を設定する方法を示しています。秘訣は、すべての設定を逆にしてを使用することOnce()
です。
var enumerator = A.Fake<IDictionaryEnumerator>();
A.CallTo(() => enumerator.MoveNext()).Returns(false).Once();
A.CallTo(() => enumerator.MoveNext()).Returns(true).NumberOfTimes(2);
A.CallTo(() => enumerator.Key).Returns("key2").Once();
A.CallTo(() => enumerator.Value).Returns("value2").Once();
A.CallTo(() => enumerator.Key).Returns("key1").Once();
A.CallTo(() => enumerator.Value).Returns("value1").Once();
while(enumerator.MoveNext())
{
Debug.WriteLine(enumerator.Key + ": "+ enumerator.Value);
}
これは印刷されます:
key1: value1
key2: value2