RhinoMocks:覆盖存根属性

时间:2014-10-28 11:33:29

标签: .net rhino-mocks

不幸的是,以下模式在RhinoMocks中不起作用:

[SetUp]
public void SetUp ()
{
    obj.Stub(s => s.Prop).Returns("a suitable default for all tests");
}

[Test]
public void VerySpecificTest ()
{
    obj.Stub(s => s.Prop).Returns("specific value, valid only for this single test");
}

它甚至没有抛出异常(特别糟糕),用户只是不知道为什么第二个Stub()调用没有任何效果。

然而,有没有办法让这项工作?如何"覆盖"一个属性返回?

1 个答案:

答案 0 :(得分:3)

IIRC,覆盖以前记录的存根或模拟行为的支持方式是回退Rhino Mocks的旧API:您可以使用BackToRecord使存根忘记其先前记录的行为,然后使用Replay返回播放模式,然后再次存根该属性:

[SetUp]
public void SetUp ()
{
    obj.Stub(s => s.Prop).Returns("a suitable default for all tests");
}

[Test]
public void VerySpecificTest ()
{
    // Clear recorded expectations and immediately go back to replay mode.
    obj.BackToRecord();
    obj.Replay();

    // Now setup a new expectation.
    obj.Stub(s => s.Prop).Returns("specific value, valid only for this single test");
}

此方法的缺点是BackToRecord会导致存根忘记为其设置的所有期望(不仅是您可能想要覆盖的期望)。有一些hackarounds可以避免这种情况(例如,使用Repeat,或使用lambda设置初始Stub,以便稍后可以更改返回值;请参阅例如{{3其中一些),但没有支持的API。

相关问题