作为TDD的初学者,我正在尝试编写一个测试,假设属性已在PropertyGrid(C#,WinForms,.NET 3.5)上更改了值.
更改属性网格中对象的属性不会触发事件(公平,因为它是一个UI引发的事件,所以我可以看到为什么更改拥有的对象可能对它不可见).
我也遇到了在更改SelectedNode属性时在TreeView上获取AfterSelect时遇到的相同问题.
我可以使用我的单元测试可以调用的函数来模拟UI事件将触发的代码,但这会使我的代码混乱,除非我将其公开,否则我必须在同一个项目中编写所有测试,甚至是我正在测试的对象(再次,我认为这是杂乱的).这对我来说似乎很难看,并且会受到可维护性问题的困扰.
是否存在执行此类基于UI的单元测试的约定
要对代码进行单元测试,您需要模拟UI界面元素的对象.您可以使用许多工具来执行此操作,但我不能推荐其他工具.在Phil Haack的博客中,MoQ和Rhino Mocks之间有一个很好的比较,我觉得它很有用,可能对你有用.
如果您正在使用TDD,那么要考虑创建一个视图界面将有助于TDD过程.有一个设计模型(可能不止一个,但这是我使用的)称为模型视图展示器(现在分为被动视图和监督控制器).其中一个将使您的代码在未来更加可测试.
另外,请记住,测试UI本身不能通过单元测试来完成.另一个答案中已经建议的测试自动化工具将适用于此,但不适用于对代码进行单元测试.