C# 使用NSubstitute使用私有setter模拟属性

C# 使用NSubstitute使用私有setter模拟属性,c#,unit-testing,.net-core,mocking,nsubstitute,C#,Unit Testing,.net Core,Mocking,Nsubstitute,我有一节课 public class MyClass { public int MyProperty1 { get; private set; } public int MyProperty2 { get; private set; } public MyClass(){} public MyClass(int myProperty2) => MyProperty2 = myProperty2; } 在我的单元测试中,在做出如下断言之前,我需要更改MyPrope

我有一节课

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
}
NSubstitute can(有关说明,请参阅)。我强烈建议将该包添加到任何引用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;
}
这可能是一个错误。我的第一个问题是你为什么要这么做?你到底想测试什么?
public class MyClass
{
    public virtual int MyProperty1 { get; private set; }
    public int MyProperty2 { get; private set; }

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