C# Rhino mocks:mock属性返回默认(null)值
如果我将使用dynamic mock并尝试使用未设置的属性,它将简单地为该属性返回默认值(null) 我只需要为一个属性在部分模拟中使用相同的行为。我需要这个属性返回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
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无法模拟非虚拟方法或属性,请参阅: