[英]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.