簡體   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