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