Est-ce que quelqu'un a un exemple de test unitaire d'une méthode asynchrone dans une application Metro de Windows 8, pour s'assurer qu'elle déclenche l'exception requise?Méthode d'asynchrone de test unitaire pour une exception spécifique
une classe avec Étant donné une méthode async
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;
}
}
Je veux écrire une méthode d'essai en utilisant la nouvelle construction de Async.ExpectsException. J'ai essayé: -
[TestMethod]
public void DivideTest1()
{
Assert.ThrowsException<DivideByZeroException>(async() => { int Result = await AsyncMathsStatic.Divide(4, 0); });
}
mais bien sûr, le test n'attend pas la méthode async pour compléter, et ainsi de résultats dans un test échoué que l'exception n'a pas été lancé.
Cela fonctionne très bien dans d'autres versions de C# , mais a été retiré de Windows 8 applications métro http: //blogs.msdn.com/b/visualstudioalm/archive/2012/06/18/visual-studio-2012-rc-quoi-s-new-in-unit-testing.aspx – Peregrine
Eh bien, c'est "intéressant"! J'ai mis à jour ma réponse pour montrer comment vous pouvez implémenter une 'ThrowsException 'compatible' async' si les tests unitaires Win8 ne le supportent pas. –
Merci Stephen qui fonctionne, même si je ne peux pas croire que ce qui semble être une nouvelle fonctionnalité aussi élégante nécessiterait un tel hack, d'autant plus que Windows 8 Metro met un tel accent sur les méthodes asynchrones. Espérons que la documentation finale suivant la version de Windows 8 sera plus à jour. – Peregrine