Test d'unité Visual Studio de Windows Forms
Nous travaillons sur un projet dans Visual Studio 2008. Nous sommes l'aide de l'essai de la suite de celle-ci (la Microsoft.VisualStudio.TestTools.UnitTesting espace de noms). Il s'avère que, à notre plus grand dam, d'une grande complexité (et donc des erreurs) ont liquidé codées dans notre couche d'INTERFACE utilisateur. Alors que nos tests unitaires faire un travail décent de couvrir notre couche de gestion, notre couche d'INTERFACE utilisateur est une source constante d'irritation. Nous avions l'idéal de l'unité de test d'évaluation, ainsi. Est-ce quelqu'un connais un bon "Microsoft-compatible" façon de faire que dans visual studio? Il présentera une sorte de conflit de " mix " de tests unitaires cadres comme nUnitForms avec le stuff Microsoft? Y sont de toute évidence les pièges à ours, je devrais être au courant d'un test unitaire formes?
source d'informationauteur GWLlosa
Vous devez vous connecter pour publier un commentaire.
Vous auriez besoin de revoir l'INTERFACE utilisateur de sorte que l'INTERFACE utilisateur n'a pas besoin de tests unitaires. L'INTERFACE utilisateur doit contenir minimum ou pas de logique métier. Il existe de nombreux modèles qui traitent de cette question. Martin Fowler a un très bon article qui explique beaucoup de choses sur ces modèles: http://martinfowler.com/eaaDev/uiArchs.html
Il y a un petit chapitre dans le Refactoring livre de Martin Fowler qui parle de refactoring non testable de l'INTERFACE utilisateur. Vous pouvez aussi lire de Travailler de façon Efficace Avec le Code existant.
Remarque: Il existe l'outil qui pourrait être utilisé pour automatiser l'INTERFACE utilisateur de test. SilkTest vient à mon esprit. Mais je ne voudrais pas utiliser si possible.
C'est tout bon pour l'application régulière de tests unitaires ... mais si vous êtes utilisateur de création de contrôles qui ont besoin de tests unitaires pour le contrôle des comportements et des états, il a besoin d'un appareil d'essai d'un cadre trop. NUnitForms pourrait être la réponse pour vous personnellement j'ai besoin de le vérifier moi-même.
Je utiliser le Passif de Vue de l'architecture que détaillé ici http://martinfowler.com/eaaDev/PassiveScreen.html
En fait, tout votre code dans les formes à une catégorie distincte appelée la xxxUI. La forme met ensuite en place un IxxxUI interface et d'exposer tout ce que le xxxUI les besoins de la classe. Vous pouvez probablement simplifier les choses et de les agréger traiter avec plusieurs commandes en une seule méthode.
Le flux passe ensuite à L'UTILISATEUR de cliquer sur un bouton. Le bouton appelle une méthode sur la correspondante de l'INTERFACE utilisateur de la classe. La réussite de tous les paramètres nécessaires. L'INTERFACE utilisateur de la méthode de Classe modifie le modèle. Ensuite, à l'aide de l'interface de mises à jour de l'INTERFACE utilisateur.
Pour les tests unitaires que vous avez testé ou factices classes implémentent les interfaces et de s'inscrire eux-mêmes avec les Classes de l'INTERFACE utilisateur. Vous pouvez avoir ces classes de test feu de n'importe quel type d'entrée et de réagir en conséquence. Généralement j'ai séquence listes chose dans un ordre bien précis. (Appuyez sur Un, cliquez sur cela, faites défiler, puis de Type B, etc).
Il est assez facile de tester Winforms avec ApprovalTests (www.approvaltests.com ou nuget essais de réception) et ils sont compatibles avec MsTest ainsi que Nunit.
Il y a une vidéo ici comment faire: https://www.youtube.com/watch?v=hKeKBjoSfJ8
Mais le processus est simple.
1) créer la forme que vous souhaitez tester dans l'état que vous souhaitez vérifier.
2) appel WinFormApprovals.Vérifier(formulaire)
ApprovalTests utilise la golden master paradigme à la capture d'écran du résultat. si vous le souhaitez, il suffit de renommer le fichier .approuvé et que le test sera concluant.
La grande chose à propos de ce pour la refactorisation de code existant est que vous n'avez même pas à vous soucier de ce que le résultat est, puisque vous ne sont concernés que vous n'êtes pas le changer.
Découvrez Jeremy D. Miller WIP Modèles de présentation page wiki pour la refactorisation de l'inspiration 🙂
Miller est l'écriture d'un livre, et il semble que ça va être un must-have pour ce genre de chose.
J'ai utilisé NUnitForms quand il s'agit de tester mes propres contrôles de l'INTERFACE utilisateur avec de bons résultats! Je suis d'accord avec les autres sur la refactorisation si vous êtes en utilisant la norme (ou bien testé) contrôles de l'INTERFACE utilisateur.
Si l'accent est mis sur les tests de contrôles réels je voudrais utiliser NUnitForms comme il peut être étendu pour prendre en charge vos nouveaux contrôles. De toute façon si vous n'êtes pas impliquer n'importe quel manuel de tests, vous aurez besoin d'une lib qui peut faire "l'image en fonction de" l'analyse de l'affiche le résultat final.
J'ai essayé de TestComplete pour cela, mais j'ai un peu trop cher car je ne pouvais code similaire lib juste pour la comparaison d'images en c#. Donc mon plan serait de tester les contrôles séparément puis refactoriser le code de l'INTERFACE utilisateur comme mentionné ma les autres.
Vous devez utiliser Microsoft Codé de l'INTERFACE utilisateur de test de la couche d'INTERFACE utilisateur. Cela implique l'écriture (ou l'enregistrement) des tests qui imitent les actions qu'un utilisateur d'effectuer et de l'écriture affirmer états à s'assurer que le bon de sortie est atteint.
Bien sûr, c'est défendable pas de tests unitaires, car il est difficile de créer des actions à partir de l'extrémité avant que le test d'une seule unité de travail et n'est pas un remplacement pour d'autres tests unitaires. Je suis également d'accord que l'extrémité avant une logique d'entreprise doit être un mince que possible. Cependant, cela va remplir les blancs lorsque vos tests unitaires ne couvrent pas. Espérons seulement de petites unités de travail ne seront pas couverts par des tests unitaires, de sorte que les tests codés de l'INTERFACE utilisateur va attraper le reste non testé unités.
Codé de l'INTERFACE utilisateur est intégré dans les dernières versions de Visual Studio Premium. Je vous suggère de ne pas utiliser simplement le record de la fonctionnalité, mais plutôt apprendre à écrire les tests vous-même car cela vous donne une plus grande flexibilité.