给出下面的类被测(和相关联的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()被调用两次:一次货号= 1,并用货号= 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”呼叫失败。 我发现,这是因为双方使用的DTO调用IBar.Test()是相同的实例。 如果我改变代码来调用IBar.Test()有两种不同的DTO的它按预期工作。
我的问题是:这是FakeItEasy的错误还是我做错了什么?