Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Rhino mocks calloriginalmethod调用已过时_C#_Unit Testing_Mocking_Rhino Mocks - Fatal编程技术网

C# Rhino mocks calloriginalmethod调用已过时

C# Rhino mocks calloriginalmethod调用已过时,c#,unit-testing,mocking,rhino-mocks,C#,Unit Testing,Mocking,Rhino Mocks,我正在为GameBoard对象编写一个单元测试代码,该对象是C#中纸牌游戏“Dominion”项目的一部分。我正在使用rhino mocks测试一个运行一段时间(!GameIsOver)的方法。在里面,下一个玩家被抓住,然后被要求轮到他们。很多代码尚未实现(例如,player.takeTurn()为空) 在我的单元测试中,我使用Rhino Mocks重写GameIsOver方法多次返回false,然后返回true以在预期时间结束测试,但我需要使用CallOriginalMethod调用我在Gam

我正在为GameBoard对象编写一个单元测试代码,该对象是C#中纸牌游戏“Dominion”项目的一部分。我正在使用rhino mocks测试一个运行一段时间(!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();
    }
}
[TestMethod]
公共void TestTurnOrderUsingMocks()
{
MockRepository mocks=新建MockRepository();
GameBoard fakeBoard=mocks.DynamicMock();
播放器p1=mocks.DynamicMock();
Player p2=mocks.DynamicMock();
字典卡=GetTestDeck();
使用(mocks.Ordered())
{
fakeBoard.PlayGame();
对于(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();
}
公共布尔AddPlayer(播放器p)
{
if(订单包含(p))
{
WriteLine(“该玩家已经被添加了!”);
返回false;
}
排队(p);
返回true;
}
公共虚拟void游戏()
{
而(!GameIsOver())
{
NextPlayer().TakeTurn();
}
}
您必须使用“OriginalCallOptions”枚举调用“CallOriginalMethod”方法。(顺便说一下,您使用的是RhinoMocks的旧API…)

将您的呼叫更改为:

        fakeBoard.Stub(x => x.AddPlayer(x => x.AddPlayer(Arg<Player>.Is.NotNull)))
                 .CallOriginalMethod(OriginalCallOptions.NoExpectation)
                 .Return(true);
fakeBoard.Stub(x=>x.AddPlayer(x=>x.AddPlayer(Arg.Is.NotNull)))
.CallOriginalMethod(原始许可选项.NoExpection)
.返回(真);

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

我已编辑了您的标题。请参阅“”,其中的共识是“不,他们不应该”。