Tester un controle Calendar avec NUnitAsp.
26 juin 2005 par Alexis KARTMANNNunitAsp 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 :
-
using System;
-
-
using NUnit.Extensions.Asp;
-
-
using NUnit.Extensions.Asp.AspTester;
-
-
-
-
namespace NUnit.Extensions.Asp.MyTesters
-
-
{
-
-
///
-
-
/// Test for for Calendar control.
-
-
///
-
-
public class CalendarTester : AspControlTester
-
-
{
-
-
static private DateTime baseDate;
-
-
-
-
static CalendarTester()
-
-
{
-
-
-
}
-
-
-
-
public CalendarTester(string aspId, Tester container) : base(aspId, container)
-
-
{
-
-
}
-
-
-
-
public void SelectDate(DateTime date)
-
-
{
-
-
TimeSpan daysSpan = date.Subtract(CalendarTester.baseDate);
-
-
int datecode = daysSpan.Days;
-
-
-
-
string tag =
-
-
string.Format("javascript:__doPostBack(’{0}’,'{1}’)",
-
-
this.AspId, datecode);
-
-
PostBack(tag);
-
-
}
-
-
}
-
-
}
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.