Comment tester le code async à l'aide de MSTest

88

J'écris du code asynchrone super simple. Il suffit d'enregistrer un fichier hors fil.

J'aimerais tester ce code à l'aide du framework de test unitaire MSTest dans Microsoft Visual Studio Team System 2008.

Comment puis-je faire cela?

Je voudrais simplement bloquer la méthode de test jusqu'au retour de la méthode. Je peux imaginer des moyens de le faire, mais je suis époustouflé qu'il n'y a pas de bonnes pratiques ou de classes d'assistance autour de cela.

Je vois beaucoup de Silverlight, mais rien de générique.

Kevin Moore
la source
4
Dupliquer? stackoverflow.com/questions/1174702/... (Je pense que les réponses fournies ne sont pas directement liées au cadre de test utilisé)
Fredrik Mörk
1
oui c'est - et la réponse sera la même je pense.
Andras Zoltan

Réponses:

163

Visual Studio 2012 (anciennement «Visual Studio 11») a introduit la prise en charge des tests asynchrones . Cela ressemble à ceci:

[TestMethod]
public async Task FooTest()
{
   var result = await SomeAsyncOperation();
   Assert.IsTrue(someCondition);
}

Comme indiqué dans les commentaires, le Tasktype de retour est important . Cela ne fonctionnera pas si vous déclarez la méthode comme retournant void.

Wim Coenen
la source
59
Notez que le Tasktype de retour est obligatoire - voidne fonctionnera pas (du moins pas sur la mise à jour 4 de VS2013)
Ohad Schneider
3
(Cela ne fonctionnera jamais, car le voidretour des méthodes asynchrones ne peut pas être attendu)
Richard Szalay
1
@RichardSzalay: on peut le faire fonctionner, voyez ici comment NUnit le fait: stackoverflow.com/questions/15031681/…
Wim Coenen
-3

Au lieu d'appeler directement les méthodes System.IO, essayez plutôt d' utiliser la bibliothèque SystemWrapper . Ensuite, dans vos tests, vous pouvez simuler les appels comme vous le souhaitez, renvoyer ce que vous voulez à votre test, y compris les conditions d'erreur, et vérifier que votre logique fonctionne comme prévu.

Si vous voulez voir un exemple, jetez un œil à ce billet de blog montrant comment il peut être utilisé avec RhinoMocks.

Richard Banks
la source
3
Je ne vois pas cela comme une réponse à la question
SteveC