【问题标题】:Rhino mocks calloriginalmethod call is obsoleteRhino 嘲笑 calloriginalmethod 调用已过时
【发布时间】:2015-05-01 15:45:03
【问题描述】:

我正在为一个 GameBoard 对象编写单元测试代码,该对象是项目的一部分,用于在 C# 中制作纸牌游戏“Dominion”。我正在使用 rhino 模拟来测试一个运行一段时间的方法(!GameIsOver)。在里面,下一个玩家被选中,然后被要求轮到他们。很多此代码尚未实现(例如 player.takeTurn() 为空)。

在我的单元测试中,我使用Rhino Mocks重写方法GameIsOver多次返回false,然后返回true在预期时间结束测试,但是我需要使用CallOriginalMethod来调用我正在使用的方法在 GameBoard 中进行测试。使用该方法的行告诉我 CallOriginalMethod 已过时,需要“原始调用选项”,我无法找到任何文档。

[TestMethod]
public void TestTurnOrderUsingMocks()
{
    MockRepository mocks = new MockRepository();
    GameBoard fakeBoard = mocks.DynamicMock<GameBoard>();
    Player p1 = mocks.DynamicMock<Player>();
    Player p2 = mocks.DynamicMock<Player>();
    Dictionary<Card, int> cards = GetTestDeck();

    using (mocks.Ordered())
    {
        fakeBoard.PlayGame();
        for (int i = 0; i < 10; i++)
        {
            p1.TakeTurn();
            p2.TakeTurn();
        }
    }
    Expect.Call(fakeBoard.AddPlayer(p1)).CallOriginalMethod();
    Expect.Call(fakeBoard.AddPlayer(p2)).CallOriginalMethod();
    Expect.Call((()=>fakeBoard.PlayGame())).CallOriginalMethod();
    Expect.Call(fakeBoard.GameIsOver()).Repeat.Times(20).Return(false);
    Expect.Call(fakeBoard.GameIsOver()).Return(true);
    mocks.ReplayAll();
    fakeBoard.PlayGame();
    mocks.VerifyAll();
}

public Boolean AddPlayer(Player p)
{
    if (turnOrder.Contains(p))
    {
        Console.WriteLine("that player has already been added!");
        return false;
    }
    turnOrder.Enqueue(p);
    return true;
}

public virtual void PlayGame()
{
    while (!GameIsOver())
    {
        NextPlayer().TakeTurn();
    }
}

【问题讨论】:

标签: c# unit-testing mocking rhino-mocks


【解决方案1】:

你必须用“OriginalCallOptions”枚举来调用“CallOriginalMethod”方法。(顺便说一下,你使用RhinoMocks的旧API......)

将您的呼叫更改为:

        fakeBoard.Stub(x => x.AddPlayer(x => x.AddPlayer(Arg<Player>.Is.NotNull)))
                 .CallOriginalMethod(OriginalCallOptions.NoExpectation)
                 .Return(true);

还有一件事,“PlayGame”方法必须是虚拟方法(应用此行为...)

【讨论】:

    猜你喜欢
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-27
    • 2016-10-02
    • 2019-12-20
    • 1970-01-01
    相关资源
    最近更新 更多