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