NSubstitute的Received(count)始终为绿色(在模拟具体类时)

g.p*_*dou 1 c# unit-testing mocking nsubstitute

编辑:在工作中,我进一步隔离了问题,该问题仅在模拟具体类时出现,而不是在界面上,因此我正在编辑标题。

语境

似乎NSubstitute的.Received(...)始终为绿色,无论是否发生任何调用。为了解决这个问题,我创建了一个两行单元测试,实际上什么也没叫,仍然检查有10个电话是绿色的:

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

使用最新的稳定版3.1.0

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

Dav*_*pak 5

NSubstitute仅适用于课堂上的虚拟成员。从创建替代品开始

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

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