Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Rhino mocks:mock属性返回默认(null)值_C#_Unit Testing_Rhino Mocks_Rhino_Partial Mocks - Fatal编程技术网

C# Rhino mocks:mock属性返回默认(null)值

C# Rhino mocks:mock属性返回默认(null)值,c#,unit-testing,rhino-mocks,rhino,partial-mocks,C#,Unit Testing,Rhino Mocks,Rhino,Partial Mocks,如果我将使用dynamic mock并尝试使用未设置的属性,它将简单地为该属性返回默认值(null) 我只需要为一个属性在部分模拟中使用相同的行为。我需要这个属性返回null。(属性不应是虚拟的) 例如: public abstract class SomeClass { public XmlDocument SomeProperty { get { return _someProperty ?? (_someProperty = SomeMethod

如果我将使用dynamic mock并尝试使用未设置的属性,它将简单地为该属性返回默认值(null)

我只需要为一个属性在部分模拟中使用相同的行为。我需要这个属性返回null。(属性不应是虚拟的)

例如:

public abstract class SomeClass
{ 
    public XmlDocument SomeProperty     
    {   
     get { return _someProperty ?? (_someProperty = SomeMethod()); } 
    //this getter should return null in my case and doesn't call SomeMethod
    }
}


[Test]
public void SomeTest()
{
    //Arrange
    var obj = MockRepository.GeneratePartialMock<SomeClass>();

    //Act
    obj.Act(); // this method will use SomeProperty

    //Assert
    ...
}
公共抽象类SomeClass
{ 
公共XML文档属性
{   
获取{return someProperty???(someProperty=SomeMethod());}
//在我的例子中,这个getter应该返回null,并且不调用SomeMethod
}
}
[测试]
公共测试()
{
//安排
var obj=MockRepository.GeneratePartialMock();
//表演
obj.Act();//此方法将使用SomeProperty
//断言
...
}

为什么属性不应该是虚拟的?属性是C#…中getter/setter方法的语法糖。。。。(为了强调我的观点,EntityFramework中的属性通常是虚拟的…)。您的问题的答案是,您无法仅使用
rhinomock
实现此行为(除非您将属性的签名更改为虚拟)。我无法更改属性,因为我涵盖了旧功能,为测试更改访问修饰符或现有功能的其他修饰符是一种不好的做法;为了能够使用UT方法,应该将代码设计为可测试代码(您可以在SO中的任何地方阅读它,也可以在google上阅读…)。Rhino mock不能模拟非虚拟的方法或属性,请参阅:为什么属性不应该是虚拟的?属性是C#…中getter/setter方法的语法糖。。。。(为了强调我的观点,EntityFramework中的属性通常是虚拟的…)。您的问题的答案是,您无法仅使用
rhinomock
实现此行为(除非您将属性的签名更改为虚拟)。我无法更改属性,因为我涵盖了旧功能,为测试更改访问修饰符或现有功能的其他修饰符是一种不好的做法;为了能够使用UT方法,应该将代码设计为可测试代码(您可以在SO中的任何地方阅读它,也可以在google上阅读…)。我认为可能会对您有所帮助。Rhino mock无法模拟非虚拟方法或属性,请参阅: