Question

Bien.

Je pense donc qu'il est temps que je me lance dans les tests unitaires, puisque tout le monde en parle depuis assez longtemps.J'ai installé NUnit et parcouru quelques didacticiels de type "introduction aux tests unitaires".

Je suis actuellement en train de mettre en place un petit framework pour aider à la reconstruction de l'une de nos applications Web. J'ai donc créé un projet VS2008 pour mon framework et je souhaite le tester unitairement au fur et à mesure.

Comment diable puis-je procéder pour tester unitairement les WebControls ?Les méthodes sont toutes protégées ou privées, et comme il s'agit d'un framework, il n'y a pas grand-chose d'autre que WebControls.

Des conseils ?

Brûlures

Était-ce utile?

La solution

Vous pouvez créer des architectures de type modèle-vue-contrôleur ou modèle-vue-présentateur sans utiliser de framework complet.Vous avez déjà découvert que les tests unitaires des composants de l'interface utilisateur sont difficiles.Il existe des moyens de contourner ce problème, mais vous ne voulez probablement pas emprunter cette voie.Habituellement, cela rendra vos tests très difficiles à maintenir, les programmeurs peuvent se passer de plus de cauchemars de maintenance :-)

Essayez de séparer les fonctionnalités que vous souhaitez tester dans une classe « contrôleur » ou « présentateur ».Testez ensuite cette classe.Pour le rendre plus testable, vous pouvez masquer la classe usercontrol (la vue) derrière une interface et faire en sorte que le contrôleur ou le présentateur parle à la vue via l'interface.De cette façon, vous pouvez simuler la vue dans vos tests.

Je sais que cela ressemble à beaucoup de travail et cela semble être une solution de contournement, mais si vous vous y habituez, c'est une architecture vraiment sympa qui facilite beaucoup la modification du comportement de l'interface utilisateur.Vous pouvez toujours commencer à utiliser un "vrai" framework mvc lorsque vous en avez vraiment besoin :-)

Autres conseils

Utilise le assembly:InternalsVisibleTo attribut et vous pourrez accéder à ces membres privés.

Mettez-le dans votre projet webcontrol AssemblyInfo.cs (sous Propriétés nœud)

[assembly:InternalsVisibleTo("YourTestProjectName")]

Vous avez trouvé le plus gros problème d’ASP.NET.En ce qui concerne les cours privés scellés qui entravent les tests unitaires.

C'est la principale raison pour laquelle les utilisateurs de TDD utiliseront un framework MVC (ASP.NET MVC, Castle MonoRail) car il offre une séparation claire de vos modèles de vue et de la logique de votre contrôleur.Les contrôleurs sont entièrement testables.

Vous pouvez également envisager de tester les composants via le navigateur, comme un utilisateur les verrait à l'aide d'un cadre de test tel que WebAii.Je l'ai vu fonctionner et c'est plutôt cool.On m'a également dit que vous pouviez le connecter à des versions automatisées, mais je ne l'ai pas encore vu.

J'espère que cela aide ...

Ce est un ancien article maintenant, mais j'utilisais NUnitASP pour écrire des tests nunit pour asp.net WebControls en 2004.Cet article donne un exemple détaillé de test d'un contrôle simple en utilisant leur concept de création d'une classe "Tester" correspondante qui encapsule les détails de votre contrôle à partir de vos tests.Le testeur peut (devrait) également se trouver dans le même assemblage que votre contrôle et peut donc partager certaines choses entre eux (par ex.fonctions utilitaires, constantes, etc.).

J'ai utilisé cette technique (et d'autres utilisent des variantes de la technique) encore aujourd'hui pour tester des contrôles très sophistiqués.

J'espère que cela est utile.

Le framework MVC mentionné ci-dessus est le meilleur moyen de tester ce que fait le contrôle.Cependant, tester son fonctionnement est un peu différent.

C'est totalement improvisé, mais vous pouvez faire en sorte que le contrôle utilisateur expose certaines méthodes et propriétés protégées pour renvoyer des informations de validation, puis faire en sorte qu'un contrôle utilisateur de test en hérite.Ce contrôle pourrait remplir des champs, appuyer sur des boutons, etc.Un peu compliqué mais ça pourrait marcher.

Vous pouvez également jeter un oeil à ceci Igloo rhinocéros cadre.Il s'agit d'un framework MVC compromis pour WebForms.

IvonnaPeut tester WebControls isolément, dans le contexte ASP.NET, il suffit d'appeler session.getControl ("path.ascx") et de vérifier qu'il a toutes les propriétés nécessaires.

Vous les testez comme ceci :

[Test]
public void ConditionQueryBuilderTest_RendersProperHtml()
{
    var sw = new StringWriter();
    var queryBuilder = new ConditionQueryBuilderStub
    {
        ID = "UnitTestbuilder",
        QueryBuilderURL = @"\SomeAspxPage\SomeWebMethod",
        ResetQueryBuilderURL = @"\SomeAspxPage\OnQueryBuilderReset",
        FilterValuesCollection = new Dictionary<int, string> { {15, "Some Condition"}}
    };
    queryBuilder.RenderAllContents(new HtmlTextWriter(sw));

    AppendLog(sw.ToString());

    Assert.AreEqual(ExpectedHtml, sw.ToString()); // ExpectedHTML is the raw expected HTML
}

Voici mon talon :

internal class ConditionQueryBuilderStub : ConditionQueryBuilder // ConditionQueryBuilder is a WebControl
{
    internal void RenderAllContents(HtmlTextWriter writer)
    {
        RenderContents(writer);
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top