mercredi 8 décembre 2010

Silverlight – Astuces – Projet de tests unitaires

Comme pour chacun de mes projets, je fais des tests unitaires.
Il en est de même pour les applications Silverlight.

C’est comme ça que j’ai découvert qu’il existait un projet de type Tests unitaires pour Silverlight.

Par contre, utilisant essentiellement Silverlight avec MOSS, je fais tout le temps appel aux web services de celui-ci.
Il faut donc que je teste l’appel aux services de façon asynchrone.

Donc, je vais rapidement survoler la solution utilisée.

Pour infos, mes applis silverlight utilise MVVM donc les appels sont effectués via un ServiceLocator dans mon Model

Pré-requis : Silverlight toolkit

Création du Projet :

creer_projet_test

On ajoute les références au projet Silverlight à tester

On compléte la clase Test générée:

[TestClass]
public class Tests : Microsoft.Silverlight.Testing.SilverlightTest //pour l'asynchrone
{
   private const String _mossUrlRoot = "http://monMoss";
   private Boolean _httpResult;
   public Tests() : base()
   {
       //http://msdn.microsoft.com/en-us/library/system.net.browser.webrequestcreator.clienthttp(VS.95).aspx
       //WebRequestCreator.ClientHttp : car j'envoi du XML dans mes requests et j'utilise les ws de moss 
       _httpResult = HttpWebRequest.RegisterPrefix(_mossUrlRoot, WebRequestCreator.ClientHttp);
       var request = WebRequest.Create(new Uri(_mossUrlRoot)) as HttpWebRequest;
       request.UseDefaultCredentials = true;
    }
[Asynchronous] //car appel asynchrone
[TestMethod]
 public void MVVM_Model_Get_Items()
{
    if (_httpResult)
    {
      //Initialise mes services
      Model.ServiceLocator.InitializeServicesTest(initParams, _mossUrlRoot);
      //Lance la requete 
      Model.ServiceLocator.MesServices.LaunchRequest();
      
      EnqueueConditional(
        () => Model.ServiceLocator.MesServices.Result != null);
      EnqueueCallback(
        () => Assert.IsTrue(Model.ServiceLocator.MesServices.Result.Count > 0));
      EnqueueTestComplete(); 
    //fin du test, mais le Assert est en attente du resultat
     }
}
}


On lance le teste, via un “View in Browser” sur le projet, voilà le résultat :



tests_unitaires



Le méthode de test bien qu’asynchrone est passée sans souci.



Si nous n’avions pas utilisé les “EnqueueCallBack” et “EnqueueTestComplete”, le test aurait retourné une erreur.



Pour réussir ce test, je me suis appuyé sur cet article : http://code.msdn.microsoft.com/silverlightut

Aucun commentaire:

Enregistrer un commentaire