Depuis début Mars 2012, Windows 8 et Visual Studio 11 sont disponibles en téléchargement gratuit (En version Consumer Preview). C’est l’occasion de tester la nouvelle API de développement pour les applications Metro : WinRT.
Je souhaite ici partager un petit bout de code qui m’a posé problème lorsque j’ai commencé le développement d’une application Metro.
Mon application est simple : Effectuer une requête Http !
Tout cela en utilisant TDD bien sur ! On commence donc par un petit test unitaire. Et là c’est le drame.
Comment fonctionnent les assertions avec async et await ?
Les assertions doivent se faire à la fin de l’ensemble des appels asynchrones. On utilise pour cela les mots-clés await et async qui vont nous permettre de gérer du code asynchrone …sans callback (Merci MS). Je ne vais pas revenir en détail sur le fonctionnement de l’asynchronisme avec le framework .NET 4.5, d’autres l’ont très bien fait ici (en anglais) et là (en français).
Notre test unitaire, pour utiliser des appels asynchrones, doit donc utiliser le mot clé async … mais doit également renvoyer un objet de type Task. (Plus d’infos sur les tests unitaires avec VS 11 et .NET 4.5)
[TestMethod]
public async Task PeutEffectuerUneRequeteHttp()
{
var client = new HttpClient();
var response = await client.GetAsync(new Uri(string.Format("http://google.fr")));
var result = await response.Content.ReadAsStringAsync();
Assert.IsNotNull(result);
Assert.IsTrue(result.StartsWith("<!doctype html>"));
}
Comment résoudre l’erreur : “System.Net.WebException: The remote name could not be resolved” lors de l’appel Http ?
De la même manière qu’un projet pour une application Metro, un projet de test unitaire Metro, contient un fichier Package.appxmanifest permettant (entre autres) de spécifier les besoins de l’application (Fichier, Réseau, Internet …).Et dans notre projet de test, la fonctionnalité Internet est par défaut …désactivée ! Pour effectuer une requête Http, il est donc préférable d’avoir cette fonctionnalité d’activée !

Onglet Capacité du fichier Package.appxmanifest

