如何单击测试(在C#中)单击按钮?

时间:2010-12-14 05:35:51

标签: unit-testing event-handling c#-3.0

我有一个用户控件,其按钮的click事件处理程序包含核心逻辑。我想测试这个按钮点击处理程序。 此处理程序函数调用另一个用户控件(位于单独的C#项目中)的公共函数,该控件最终调用引用程序集的公共函数。 任何人都可以告诉我 - 这样一个处理程序的单元测试怎么样?

2 个答案:

答案 0 :(得分:3)

您可以编写一种方法,以编程方式引发Click事件并从单元测试中调用它。

编辑:啊,这实际上已经存在:http://msdn.microsoft.com/en-us/library/hkkb40tf(VS.90).aspx

答案 1 :(得分:3)

在单元测试中,我们测试单元 - 在这种情况下是用户控件。仅此而已。但是我们不应该允许用户控件访问外部世界,我们应该使用模拟技术。 例如,如果您的UserControlA调用UserControlB,请为UserControlB创建一个接口,并将其替换为模拟UserControlB:

   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");
       }
   }

为确保UserControlB确实调用引用库,这属于UserControlB的单元测试。