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;
}