Quantcast
Channel: MSDN Blogs
Viewing all articles
Browse latest Browse all 35736

Tips & Tricks : Méthode Asynchrone et Test Unitaire

$
0
0

 

Le développement Windows 8 sur la plate-forme WinRT impose l’utilisation de méthode asynchrone, ça vous le savez .

Le couple async/await, nous rend de grands services dans la plus part des cas mais pas dans le cas d’un test unitaire.

Imaginons que j’ai une méthode asynchrone en C# qui retourne un Task<T>

Code Snippet
  1. public static async Task<T> LoadLocalFileAsync<T>(String LocalPath)

Ma méthode de test pourrait alors appeler directement ma méthode asynchrone

Code Snippet
  1. [TestMethod]
  2.          publicasync void TestMethod1()
  3.        {
  4.            var t = await Helper.LoadLocalFileAsync<FichesProduits>("test.Dat");
  5.        }

 

Ce type de code, même si cela compile, ne fonctionne pas, et la méthode n’est pas reconnue comme étant une méthode de test. (Avec un coup d’ILDASM, vous comprendrez pourquoi).

Mais async/await ne sont que des sucres syntaxiques pour nous aider. La solution est donc de le faire à l’ancienne, ou plus précisément d’utiliser une autre syntaxe grâce à des méthodes d’extension disponible dans la TPL (Task Parallel Library).

du coup ma méthode de test devient :

Code Snippet
  1. [TestMethod]
  2.          publicvoid TestMethod1()
  3.        {
  4.            var task =  Helper.LoadLocalFileAsync<FichesProduits>("test.Dat");
  5.            task.Wait();
  6.            var operation = task.AsAsyncOperation<FichesProduits>();
  7.            var c = operation.GetResults();
  8.        }
  9.        

La méthode d’extension utilisée est AsAsyncOperation() qui convertie une Task<TResult> en une IAsyncOperation<TResult>, du coup on peut utiliser la méthode GetResults(), pour retrouver le résultat.

 

Bon test.

Eric Vernié


Viewing all articles
Browse latest Browse all 35736

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>