Pregunta

Digamos que quiero hacer una prueba de unidad donde tengo este juego de Tetris y quiero comenzar el juego, no hago nada, y espera que el juego haya terminado (esto es, para obtener un evento de Gamever):

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

¿Cómo debo hacer la prueba?Esto probablemente debería ser fácil, pero no puedo ver cómo hacerlo. Mi única idea sería algo de la forma:

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

gracias

¿Fue útil?

Solución

Suponiendo tetris.Start() es síncrono Puede señalar a la prueba utilizando el manejador de eventos:

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

Si la llamada es asíncrona, debe sincronizar la llamada para llegar al Assert en el contexto de prueba.

Otros consejos

Escribí una pequeña clase de ayuda que me gusta usar.Puede encontrar el clase aquí y el Pruebas de unidad para la clase aquí .Puede sentirse libre de usarlo, pero por favor use bajo su propio riesgo.Lo estoy usando para mis pruebas, pero es bastante posible que haya bichos.Para su caso, el uso de la clase se vería así:

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


Editar: Parece que también requiere emithelpers .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top