Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 如何单元测试(用C#)按钮是否被点击?_Unit Testing_Event Handling_C# 3.0 - Fatal编程技术网

Unit testing 如何单元测试(用C#)按钮是否被点击?

Unit testing 如何单元测试(用C#)按钮是否被点击?,unit-testing,event-handling,c#-3.0,Unit Testing,Event Handling,C# 3.0,我有一个用户控件,它有一个按钮,其单击事件处理程序包含核心逻辑。我想测试这个按钮点击处理程序。 此处理程序函数调用另一个用户控件(位于单独的C#项目中)的公共函数,该控件最终调用引用程序集的公共函数。 有人能告诉我-这样的处理程序的单元测试将如何进行吗?您可以编写一个方法,以编程方式引发Click事件,并从单元测试中调用它 编辑:啊,这实际上已经存在了:在单元测试中,我们测试单元——在本例中是用户控件。没别的了。但我们不应该允许用户控件访问外部世界,我们应该使用模拟技术。 在示例中,如果您的Us

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

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


编辑:啊,这实际上已经存在了:

在单元测试中,我们测试单元——在本例中是用户控件。没别的了。但我们不应该允许用户控件访问外部世界,我们应该使用模拟技术。 在示例中,如果您的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的单元测试

该按钮通常在usercontrol中是私有的。这让人觉得很烦人。