繁体   English   中英

NSubstitute:何时…在模拟void方法时不工作

[英]NSubstitute: When…Do not working while mocking void method

我是NSubtitute的新手,真的很困惑为什么下面的测试用例失败了。

  public class IFoo {
       public void SayHello(string to)
        {
          Console.writeLine("Method called");
        }
    }

[Test]
public void SayHello() {
    var counter = 0;
    var foo = Substitute.For<IFoo>();
    foo.When(x => x.SayHello("World"))
        .Do(x => counter++);

    foo.SayHello("World");
    foo.SayHello("World");
    Assert.AreEqual(2, counter);
}

它适用于以下代码。 唯一的区别是类(上例)中的方法和接口(下例)中的方法的回调。

public interface IFoo {
    void SayHello(string to);
}

[Test]
public void SayHello() {
    var counter = 0;
    var foo = Substitute.For<IFoo>();
    foo.When(x => x.SayHello("World"))
        .Do(x => counter++);

    foo.SayHello("World");
    foo.SayHello("World");
    Assert.AreEqual(2, counter);
} 

NSubstitute旨在与接口一起使用。 它在类方面有一些限制,例如只能为虚拟成员工作。

从他们的文档中

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM