【发布时间】:2012-05-21 14:59:03
【问题描述】:
我有一个简单的要求,但我似乎在苦苦挣扎。
我创建了一个 stub 来模拟包含 Property 的 interface :
public interface IMockIRuleRuningViewModel : IRuleRunningViewModel
{
int Id { get; set; }
}
mock 是:
var mock = MockRepository.GenerateStub<IMockIRuleRuningViewModel>();
现在我想mock 一个动作,我会为此Property 设置一个设置器,这是我的尝试:
mock.Stub(x => x.Id).WhenCalled(
o =>
{
var engine = new RulesEngine(mock);
mock.ProcessRuleEngineResults(engine.RunRule("Id"));
});
但我不断收到这个Exception:
您正在尝试对定义为使用 PropertyBehavior 的属性设置期望值。 而不是编写这样的代码:mockObject.Stub(x => x.SomeProperty).Return(42); 可以直接使用属性来达到同样的效果:mockObject.SomeProperty = 42;
【问题讨论】:
-
你可能想要
GenerateMock而不是GenerateStub。 -
所以你想在设置Id属性的时候执行代码?
-
是的,我确实想在 setter 中执行代码
-
GenerateMock 不起作用。当我设置属性时,什么也没有发生(它甚至没有设置属性 - 值保持在 0)
-
想要在模拟/存根对象的设置器中执行代码的用例是什么?通常,存根/模拟是依赖项的简单替代品或占位符。如果您有需要在 setter 上执行的代码,那应该是实现接口的对象的单元测试的一部分。
标签: c# unit-testing mocking rhino-mocks