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 に答える