我在这个问题中遵循公认的答案,但我得到了一个NullReferenceException
。
我需要的是有一个部分模拟存根属性(getter和setter)表现得像一个存根(作为一个简单的自动属性)。目前我可以存根getter,但不能存根setter。
这可能吗?
这是一个简单的例子,我希望它有助于解释我的问题。public class SomeClass
{
public virtual string SomeProperty
{
get{ return SomeMethodDependingOnDBOrAspSession(); }
set{ SomeMethodDependingOnDBOrAspSession(value); } // I want to avoid calling this setter implementation
}
}
var partialMock = MockRepository.GeneratePartialMock<SomeClass>();
partialMock.Stub(p => p.SomeProperty); // I want SomeProperty to behave as an automatic property
当使用PartialMock
时,您可以通过使用Rhino mock的PropertyBehavior
功能获得自动实现的属性行为。考虑到你问题中的类,下面的nunit测试对我来说通过了。
[Test]
public void TestPartialMock()
{
var someClass = MockRepository.GeneratePartialMock<SomeClass>();
someClass.Stub(x => x.SomeProperty).PropertyBehavior();
string val = "yo!";
Assert.DoesNotThrow(() => someClass.SomeProperty = val);
Assert.AreEqual(val, someClass.SomeProperty);
}
如果你不需要PartialMock
,你可以使用Stub
,它默认具有属性行为。您只需将测试的前两行替换为:
var someClass = MockRepository.GenerateStub<SomeClass>();