让我们说我想在我拥有这个俄罗斯方案的单位测试,我想开始游戏,什么都不做,等待游戏结束(这是,得到一个游戏事件):

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

我该如何进行测试?这可能很容易,但我看不到如何做到这一点。 我唯一的想法将是形式的东西:

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

感谢

有帮助吗?

解决方案

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

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

如果呼叫是异步,则必须同步呼叫,以便在测试上下文中获取 Assert

其他提示

我写了一个我喜欢使用的小辅助课程。你可以找到 class这里在这里的类别的单位测试。您可以随意使用它,但请使用您自己的风险。我正在使用它来进行测试,但它很可能有错误。对于您的情况,使用该类看起来像这样:

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


编辑:看起来它也需要 emithelpers

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top