【问题标题】:NSubstitute: When....Do not working while mocking void methodNSubstitute:When....不要在模拟 void 方法时工作
【发布时间】:2015-03-11 15:49:24
【问题描述】:

我是 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);
} 

【问题讨论】:

    标签: c# mocking nsubstitute


    【解决方案1】:

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

    来自他们的documentation:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-21
      相关资源
      最近更新 更多