2

假设我想做一个单元测试,我有这个俄罗斯方块游戏,我想开始游戏,什么都不做,等待游戏结束(这是,得到一个 GameOver 事件):

Tetris tetris = new Tetris();
tetris.GameOver += something;
tetris.Start();

我应该如何进行测试?这应该很容易,但我不知道该怎么做。我唯一的想法是以下形式:

Tetris tetris = new Tetris();
tetris.GameOver += delegate() { Assert.True(); };
tetris.Start();

谢谢

4

2 回答 2

1

假设tetris.Start()是同步的,您可以使用事件处理程序向测试发出信号:

Tetris tetris = new Tetris();
bool wasRaised = false;
tetris.GameOver += delegate() { wasRaised = true; };
tetris.Start();
Assert.IsTrue(wasRaised);

如果调用是异步的,则必须同步调用才能进入Assert测试上下文。

于 2010-07-24T15:58:46.963 回答
1

我写了一个我喜欢使用的小助手类。您可以在此处找到课程,并在此处找到课程的单元测试。您可以随意使用它,但请自行承担使用风险。我将它用于我的测试,但很可能存在错误。对于您的情况,使用该类将如下所示:

        Tetris tetris = new Tetris();
        using (EventAssertion.Raised(tetris, "GameOver").OnlyOnce().Go())
        {
            tetris.Start();
        }

编辑:看起来它也需要EmitHelpers

于 2010-07-24T16:02:39.093 回答