2010-12-14 49 views
2

J'ai un contrôle utilisateur avec un bouton dont le gestionnaire d'événements click contient la logique de base. Je veux tester ce gestionnaire de clic sur un bouton. Cette fonction gestionnaire appelle une fonction publique d'un autre contrôle utilisateur (qui réside dans un projet C# distinct) qui appelle finalement la fonction publique d'un assembly de référence. Quelqu'un peut-il s'il vous plaît dites-moi - comment sera le test unitaire pour un tel gestionnaire?Comment tester unitairement (en C#) un clic sur un bouton?

Répondre

3

Dans les tests unitaires, nous testons l'unité - dans ce cas, le contrôle de l'utilisateur. Et rien de plus. Mais nous ne devrions pas permettre au contrôle de l'utilisateur d'accéder au monde extérieur, nous devrions utiliser des techniques de moquerie. Dans l'exemple, si vos appels UserControlA UserControlB, créez une interface pour UserControlB et le remplacer par un UserControlB maquette:

class UserControlA { 
     UserControlBInterface BReference; 
     public void setBReference(UserControlBInterface reference) { this.BReference = reference }; 
     void OnClick (...) { BReference.callAMethod(); } 
    } 
    class MockupForB : UserControlBInterface { 
     boolean called=false; 
     public void callAMethod() { this.called = true; } 

    } 
    class TesterA : UnitTest { 
     public void testOnClick() 
     { UserControlA a = new UserControlA(); MockupForB mockup = new MockupForB(); a.setBReference(mockup); 
      a.Button1.PerformClick(...); //following Aaronontheweb's advice 
      assertTrue(mockup.called,"the method callAMethod not being called by UserControlA"); 
     } 
    } 

Et pour assurer UserControlB appelle en effet une bibliothèque de référence, cela appartient à un test unitaire pour UserControlB.