使用nmoq,如何对特定的事件预期?
-
29-09-2020 - |
题
让我们说我想在我拥有这个俄罗斯方案的单位测试,我想开始游戏,什么都不做,等待游戏结束(这是,得到一个游戏事件):
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
不隶属于 StackOverflow