我目前正在使用FakeItEasy进行单元测试。我假装NServiceBus .Send方法调用是在一个方法中进行的。
我遇到的问题是我在方法中发送了两条消息:
bus.Send(new CommandOne(Id = [something]));
bus.Send(new CommandTwo(Id = [something]));
两个命令都在伪造的总线上以相同的方法调用发送(为了简单起见,我删除了真正的命令名称和参数)。
以下是我的NUnit代码/ FakeItEasy代码:
bus = A.Fake<IBus>;
var sut = new Sut(bus);
sut.MethodCall();
A.CallTo(() => bus.Send(A<CommandOne>.That.Matches(co => co.Id == [someId]).MustHaveHappened(Repeated.Exactly.Once);
A.CallTo(() => bus.Send(A<CommandTwo>.That.Matches(co => co.Id == [someId]).MustHaveHappened(Repeated.Exactly.Once);
但是,当我运行此测试时,我得到一个测试失败的结果,说明:
System.InvalidCastException : Unable to cast object of type 'CommandTwo' to type 'CommandOne'.
当我发送两个不同的命令起诉相同的假,我指定特定的对象类型和命令的属性匹配,但FakeItEasy正在尝试转发第一个命令被发送(CommandOne),两个秒命令发送(CommandTwo)...
有没有办法使用FakeItEasy来测试同一个被调用两次伪造对象的方法,每个调用具有不同的值?
谢谢, 麦克
答案 0 :(得分:2)
您的问题听起来非常像Issue 326 - Argument Constraints should support derived types as Type Arguments,最近已在FakeItEasy release 1.22.0中修复。如果您未使用该版本,请升级并查看该行为是否仍然存在。 如果 使用1.22.0,请回来评论,以便我们继续尝试!