对于Rhino Mocks,BackToRecord()是否还应清除方法调用次数的计数?

Sim*_*eep 4 c# rhino-mocks

关于SO的其他许多问题,据说为了重置对模拟对象进行方法调用的次数计数,可以先调用BackToRecord(),再调用Replay()。

但是,这对我不起作用。它将重置存根值,但不重置方法调用计数。

因此,从相关问题中扩展示例...

public interface IFoo { string GetBar(); }
    [TestMethod]
    public void TestRhino()
    {
        var fi = MockRepository.GenerateStub<IFoo>();
        fi.Stub(x => x.GetBar()).Return("A");
        Assert.AreEqual("A", fi.GetBar());
        fi.AssertWasCalled(x=>x.GetBar(), x=>x.Repeat.Once());

        // Switch to record to clear behaviour and then back to replay
        fi.BackToRecord(BackToRecordOptions.All);
        fi.Replay();

        fi.Stub(x => x.GetBar()).Return("B");
        Assert.AreEqual("B", fi.GetBar());
        fi.AssertWasCalled(x => x.GetBar(), x => x.Repeat.Once());
    }
Run Code Online (Sandbox Code Playgroud)

这在最后一行带有“预期的#1,实际的#2”的地方失败。

我是否遗漏了要点,或者对于方法计数根本不起作用?无论如何,有没有实现新的模拟就可以实现这一目标?

由于我不愿讨论的原因,我无法在调用GetBar()之前设置期望。

Jay*_*Jay 5

好吧,这种方式行不通。这是一个不寻常的用例。

这是一种选择:

[TestMethod]
public void TestRhino()
{

    var getBarCount = 0;

    var fi = MockRepository.GenerateStub<IFoo>();
    fi.Stub(x => x.GetBar()).Return("A").WhenCalled(x => getBarCount++);
    Assert.AreEqual("A", fi.GetBar());
    Assert.AreEqual(1, getBarCount);

    // Switch to record to clear behaviour and then back to replay
    fi.BackToRecord(BackToRecordOptions.All);
    fi.Replay();
    getBarCount = 0;

    fi.Stub(x => x.GetBar()).Return("B").WhenCalled(x => getBarCount++);
    Assert.AreEqual("B", fi.GetBar());
    Assert.AreEqual(1, getBarCount);
}
Run Code Online (Sandbox Code Playgroud)