次のテスト中のクラス(および関連するDTOクラスとインターフェイス)があるとします。
public class Foo
{
private readonly IBar _bar;
public Foo(IBar bar) { _bar = bar; }
public void DoStuff()
{
var dto = new DTO();
dto.Num = 1;
_bar.Test(dto);
dto.Num = 2;
_bar.Test(dto);
}
}
public class DTO { public int Num { get; set; } }
public interface IBar { void Test(DTO dto); }
そして、このテストメソッド(IBar.Test()が2回呼び出されることを確認しようとします:1回はNum = 1で、もう1回はNum = 2で):
public void TestMethod1()
{
var bar = A.Fake<IBar>();
var foo = new Foo(bar);
foo.DoStuff();
A.CallTo(() => bar.Test(A<DTO>.That.Matches(x => x.Num == 1))).MustHaveHappened();
A.CallTo(() => bar.Test(A<DTO>.That.Matches(x => x.Num == 2))).MustHaveHappened();
}
最初の「MustHaveHappened」呼び出しは失敗します。IBar.Test()の両方の呼び出しで使用されるDTOが同じインスタンスであることが原因であることがわかりました。2つの異なるDTOを使用してIBar.Test()を呼び出すようにコードを変更すると、期待どおりに機能します。
私の質問は:これはFakeItEasyのバグですか、それとも私は何か間違ったことをしていますか?