我倾向于转向仅应测试公共接口的观点,从而涵盖私人程序的测试.然而,昨天出现了一个有趣的问题 – 应该测试事件处理程序吗?我的直觉是逻辑应该存储在由处理程序自己调用的自包含程序中,但这是主观的,并且很可能导致私有程序而不是正在测试的公共程序.我是否应该对事件处理程序进行单元测试?如果是,那么这样做的最佳做法是什么? 最佳答案 我决不会说某人对单元测试事件处理程序是“错误的”.就个人而言,我会选择“测试什么可能会破坏”的理念而不会.
我看到的事件代码一直出错的主要原因是单元测试无法捕获 – “On”方法将只是:
if (MyEventHandler != null)
MyEventHandler(this, e);
这有竞争条件;应在空检查之前将MyEventHandler分配给变量.
第二个常见错误是为“e”事件数据参数传递null的人;这可以测试.
如果您没有第2版框架设计指南的副本.通过Cwalina&艾布拉姆斯,现在买.它将告诉您如何每次正确编写事件代码,如何正确编写Dispose模式以及许多其他内容.