给定以下被测类(以及相关的 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() 被调用了两次:一次是 Num = 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 是同一个实例。如果我将代码更改为使用两个不同的 DTO 调用 IBar.Test(),它会按预期工作。
我的问题是:这是 FakeItEasy 中的错误还是我做错了什么?