¿Alguien tiene un ejemplo de cómo probar un método asincrónico en una aplicación Metro de Windows 8, para asegurarse de que lanza la excepción requerida?Método asincrónico de prueba unitaria para excepción específica
dado una clase con un método asíncrono
public static class AsyncMathsStatic
{
private const int DELAY = 500;
public static async Task<int> Divide(int A, int B)
{
await Task.Delay(DELAY);
if (B == 0)
throw new DivideByZeroException();
else
return A/B;
}
}
Quiero escribir un método de ensayo utilizando la nueva construcción Async.ExpectsException. He intentado: -
[TestMethod]
public void DivideTest1()
{
Assert.ThrowsException<DivideByZeroException>(async() => { int Result = await AsyncMathsStatic.Divide(4, 0); });
}
pero por supuesto la prueba no espera a que el método asíncrono para completar, y así resulta en una prueba fallida que la excepción no ha sido lanzado.
Esto funciona bien en otras versiones de C# , pero se ha eliminado de las aplicaciones de Metro de Windows 8 http: //blogs.msdn.com/b/visualstudioalm/archive/2012/06/18/visual-studio-2012-rc-what-s-new-in-unit-testing.aspx – Peregrine
¡Bueno, eso es "interesante"! He actualizado mi respuesta para mostrar cómo se puede implementar un 'ThrowsException' compatible con' async' si las pruebas de la unidad Win8 no lo admiten. –
Gracias Stephen que funciona, aunque no puedo creer que lo que parece ser una nueva característica tan elegante requiera tal hack, especialmente teniendo en cuenta que Windows 8 Metro pone tanto énfasis en los métodos asíncronos. Afortunadamente, la documentación final posterior al lanzamiento de Windows 8 será más próxima. – Peregrine