【问题标题】:Stub setter in Rhino Mock partial mockRhino Mock 部分模拟中的存根设置器
【发布时间】:2013-05-11 15:24:12
【问题描述】:

我正在关注question 中接受的答案,但我得到了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

【问题讨论】:

  • 代码示例来说明问题?
  • @JeffBridgman 我添加了一个例子,谢谢。

标签: unit-testing rhino-mocks stub partial-mocks


【解决方案1】:

当使用PartialMock 时,您可以通过使用Rhino Mocks 的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>();

【讨论】:

  • 是的,我忘记在示例中添加 virtual 但我已经在我的代码中使用了这个关键字。与您的答案不同的是,我需要使用 Partial Mock,而不是 Stub。我更新了我的例子
  • 更新了问题,改为使用PartialMock
猜你喜欢
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-07
  • 2013-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多