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