其他分享
首页 > 其他分享> > CodeGo.net>与犀牛嘲笑应BackToRecord()还清除计数的方法被称为次数?

CodeGo.net>与犀牛嘲笑应BackToRecord()还清除计数的方法被称为次数?

作者:互联网

关于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());
    }

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

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

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

解决方法:

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

这是一种选择:

[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);
}

标签:c,rhino-mocks
来源: https://codeday.me/bug/20191102/1988223.html