FakeItEasyで偽物を作成して、連続呼び出しで異なる戻り値を許可するにはどうすればできますか?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で私がしたいことはできますか?
。
は、元の質問の例を明確化し、以下の実施例を提供
[編集]。
パトリックの答えに基づいて、このコードはあなたが偽をセットアップする方法を示しています。そのトリックはすべての設定を逆にして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
はい、そうです。私はレコード/リプレイモデルの後だった。 FakeItEasyには意味がありません。私は質問を編集し、2つのMoveNextに値を与える実例を含めます。助けてくれてありがとう。 – hcanber