NSubstitute的接收(计数)始终为绿色(模拟混凝土类时)



编辑:在工作中我进一步隔离,问题仅在模拟具体类时,而不是界面,所以我正在编辑标题。

上下文

看来是的.接收 (...( 始终为绿色,无论是否发生任何呼叫。 为了隔离这个问题,我创建了一个两行单元测试,实际上没有调用任何东西,仍然检查 10 个调用是绿色的:

var processor = Substitute.For<Processor>();
processor.Received(10).Process(Arg.Any<MyType>()); // this is green (do not throws)

使用最新的稳定版 3.1.0

问题

我错过了什么吗?如果是,检查特定数量的呼叫的正确方法是什么?(坏消息是,如果这是一个错误,我们的项目充满了潜在的假果岭。

NSubstitute 只能与类上的虚拟成员一起使用。从创建替代品:

警告:替换类可能会产生一些令人讨厌的副作用。对于初学者来说,NSubstitute只能与类的虚拟成员一起工作,因此类中的任何非虚拟代码都将实际执行!如果你试图替换在构造函数或非虚拟属性设置器中格式化硬盘驱动器的类,那么你就是在自找麻烦。如果可能,请坚持替换接口。

这意味着您只能在标记为虚拟的成员上使用.Received()When()..Do().Returns。替换接口时,所有成员都可以正常工作。