簡體   English   中英

使用 NSubstitute 使用私有 setter 模擬屬性

[英]Mock a property with a private setter using NSubstitute

我有一堂課

public class MyClass
{
   public int MyProperty1 { get; private set; }
   public int MyProperty2 { get; private set; }

   public MyClass(){}
   public MyClass(int myProperty2) => MyProperty2 = myProperty2;
}

在我的單元測試中,我需要在做出如下斷言之前更改 MyProperty1 的值

[Fact]
public void MyTest()
{
   var fake = NSubstitute.Substitute.For<MyClass>(3);
   fake.MyProperty1.Returns(5);

   //Assertion
}

但是我收到錯誤

Outcome: Failed
    Error Message:
    NSubstitute.Exceptions.CouldNotSetReturnDueToNoLastCallException : Could not find a call to return from.

NSubstitute 不能存根類的非虛擬成員(請參閱NSubstitute 的工作原理以獲取解釋)。 我強烈建議將NSubstitute.Analyzers包添加到任何引用 NSubstitute 的測試項目中,因為這將在嘗試替換非虛擬方法時提供編譯時警告。

Property1更新為virtual ,測試按預期工作:

public class MyClass
{
    public virtual int MyProperty1 { get; private set; }
    public int MyProperty2 { get; private set; }

    public MyClass() { }
    public MyClass(int myProperty2) => MyProperty2 = myProperty2;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM