3

我正在关注这个问题中公认的答案,但我得到了一个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
4

1 回答 1

2

使用 a 时,您可以通过使用Rhino Mocks 的功能PartialMock来获得类似行为的自动实现属性。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);
}

如果您不需要 a ,则PartialMock可以使用Stub默认具有属性行为的 a 。您只需将测试的前两行替换为:

var someClass = MockRepository.GenerateStub<SomeClass>();
于 2013-05-31T14:15:14.010 回答