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