Tester un controle Calendar avec NUnitAsp.

NunitAsp est un outil fabuleux pour le test unitaire de site réalisé en ASP.Net

Surtout qu’avec l’utilisation d’un parser sgml il n’est plus nécessaire d’avoir un code XHTML pour l’utiliser.

Je m’en sert depuis une semaine de manière intensive et j’ai pu tout tester dans mon site grâce au testeurs de contrôle de base.

Tout, sauf le contrôle calendrier (Calendar) qui n’est pas géré en standard. Qu’à cela ne tienne, je regarde un peu le code généré, et il est assez facile de déterminer que le choix d’une date se fait par un post-back du type __doPostBack('identifiant du contrôle','identifiant du jour').

L’identifiant du jour me semble incrémental, mais sa valeur n’est pas triviale. Alors je lance Reflector et je regarde un peu le code de génération du contrôle calendrier. J’y voie que l’identifiant du jour est en fait le nombre de jour écoulé depuis le premier janvier 2000.

A partir de là, l’écriture d’un contrôle de test est assez facile :

CSharp [Show Plain Code]:
  1. using System;
  2.  
  3. using NUnit.Extensions.Asp;
  4.  
  5. using NUnit.Extensions.Asp.AspTester;
  6.  
  7.  
  8.  
  9. namespace NUnit.Extensions.Asp.MyTesters
  10.  
  11. {
  12.  
  13.         ///
  14.  
  15.         /// Test for for Calendar control.
  16.  
  17.         ///
  18.  
  19.         public class CalendarTester  : AspControlTester
  20.  
  21.         {
  22.  
  23.                 static private DateTime baseDate;
  24.  
  25.  
  26.  
  27.                 static CalendarTester()
  28.  
  29.                 {
  30.  
  31.                         baseDate = new DateTime(2000, 1, 1);
  32.  
  33.                 }
  34.  
  35.  
  36.  
  37.                 public CalendarTester(string aspId, Tester container) : base(aspId, container)
  38.  
  39.                 {
  40.  
  41.                 }
  42.  
  43.  
  44.  
  45.                 public void SelectDate(DateTime date)
  46.  
  47.                 {
  48.  
  49.                         TimeSpan daysSpan = date.Subtract(CalendarTester.baseDate);
  50.  
  51.                         int datecode = daysSpan.Days;
  52.  
  53.  
  54.  
  55.                         string tag =
  56.  
  57.                                            string.Format("javascript:__doPostBack(’{0}’,'{1}’)",
  58.  
  59.                                                   this.AspId, datecode);
  60.  
  61.                         PostBack(tag)
  62.  
  63.                 }
  64.  
  65.         }
  66.  
  67. }

Evidement ce code est limité, il ne permet pas de simuler la navigation d’un mois à l’autre, ni de vérifier que le jour choisi est bien affiché dans le calendrier, notamment si on surcharge l’événement DayRender du contrôle Calendar. Et il ne fonctionne qu’avec une sélection d’un jour unique.

Mais c’est un début, et cela devrait suffire dans la plupart des cas.

Laisser un commentaire


Propulsé par WordPress