代码之家  ›  专栏  ›  技术社区  ›  g.pickardou

nsubstitute的received(count)始终为绿色(模拟具体类时)

  •  1
  • g.pickardou  · 技术社区  · 6 年前

    编辑:在工作中我进一步隔离,认为问题只是当模拟具体的类,而不是接口,所以我编辑的标题。

    语境

    似乎nsubstitute的.received(…)总是绿色的,不管是否发生了任何调用。 为了隔离这个问题,我创建了一个两行单元测试,实际上 不要叫任何东西 ,仍在检查是否有10个呼叫为绿色:

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

    使用最新的Stable 3.1.0

    问题

    我遗漏了什么吗?如果是,那么针对特定电话号码的正确检查方法是什么?(坏消息是,如果这是一个bug,那么我们的项目充满了潜在的错误绿色。

    1 回复  |  直到 6 年前
        1
  •  4
  •   David Tchepak    6 年前

    nsubstitute只对类上的虚拟成员起作用。从 Creating a substitute :

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

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