.net Rhinomock:重写存根属性

.net Rhinomock:重写存根属性,.net,rhino-mocks,.net,Rhino Mocks,不幸的是,以下模式在Rhinomock中不起作用: [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 s

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

[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()
调用没有任何效果


然而,有没有一种方法可以让这一切顺利进行?如何“覆盖”单个属性返回?

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
会导致存根忘记为其设置的所有期望(而不仅仅是您可能要覆盖的期望)。有一些解决方法可以避免这种情况(例如,使用
Repeat
,或者使用lambda设置初始
存根
,以便您以后可以更改返回值;例如,请参阅其中一些方法),但没有支持的API。您对
BackToRecord
的解释听起来像我所有的存根()电话没了?这有点像从头开始创建一个新的存根?是的,它还改变了存根的行为,使其行为像一个严格的模拟,所以。。。不太理想。这是对类似问题的一个很好的回答:。它还有一个扭曲:当将
存根
调用放在
BackToRecord
Replay
之间时,它会将对象切换到严格模式。但是,当您将
存根
调用放在
重播
之后时,它将保留存根行为。我将相应地调整代码示例。感谢所有的信息,我以前也找到了其他线程,但是,我认为一定有一些简单/更容易的方法来实现这一点…:-)