编辑:在工作期间我进一步孤立,问题只是在模拟具体类而不是界面时,所以我正在编辑标题。
上下文
似乎NSubstitute的.Received(...)始终是绿色的,无论是否发生任何通话。 为了解决这个问题,我创建了一个双线单元测试,实际上不会调用任何东西,仍然检查有10个调用是绿色的:
var processor = Substitute.For<Processor>();
processor.Received(10).Process(Arg.Any<MyType>()); // this is green (do not throws)
使用最新的稳定3.1.0
问题
我错过了什么吗?如果是,检查特定呼叫数量的正确方法是什么? (坏消息是,如果这是一个错误,我们的项目充满了潜在的错误绿色。
答案 0 :(得分:4)
NSubstitute只能在课堂上使用虚拟成员。来自Creating a substitute:
警告:替换课程会产生一些令人讨厌的副作用。对于初学者来说,NSubstitute只能与该类的虚拟成员一起工作,因此该类中的任何非虚拟代码都将实际执行!如果您尝试替换在构造函数或非虚拟属性设置器中格式化硬盘驱动器的类,那么您就会遇到麻烦。如果可能的话,坚持用接口代替。
这意味着您只能对标记为虚拟的成员使用.Received()
,When()..Do()
和.Returns
。替换接口时,所有成员都可以正常工作。