这对于常规的应用程序单元测试来说都非常好......但是如果您正在构建需要测试控件行为和状态的用户控件,那么它也需要一个单元测试框架。 NUnitForms可能是您的答案——就我个人而言,我需要亲自验证一下。
我使用被动视图架构,具体细节可以在这里查看:http://martinfowler.com/eaaDev/PassiveScreen.html
基本上将所有代码移至表单中的一个名为xxxUI的独立类中。然后该表单实现IxxxUI接口并公开xxxUI类所需的任何内容。您可能可以简化事情,并将处理几个控件聚合到一个方法中。
流程如下:用户单击按钮。 按钮调用相应UI类上的方法,传递任何需要的参数。 UI类方法修改模型。 然后使用接口更新UI。
对于单元测试,您需要测试或虚拟类实现接口,并将自己注册到UI类中。 您可以让这些测试类触发任何类型的输入并相应地作出反应。 通常我有序列列表以精确顺序执行操作(点击A,单击此处,滚动那里,然后键入B等)。
对于Windows 10,微软现在推荐使用带有WinAppDriver的Appium。VS 2019将是最后一个包含Microsoft Coded UI的版本。
https://learn.microsoft.com/en-us/visualstudio/test/use-ui-automation-to-test-your-code?view=vs-2019
使用ApprovalTests(www.approvaltests.com或nuget批准测试)测试Winforms非常容易,并且它们与MsTest和Nunit兼容。
这里有一个视频,介绍如何操作:https://www.youtube.com/watch?v=hKeKBjoSfJ8
但是,这个过程很简单。 1)创建您想要在所需状态下进行验证的表单。 2)调用WinFormApprovals.Verify(form)
ApprovalTests使用黄金大师范例来屏幕捕获结果。如果您喜欢它,只需将文件重命名为.approved,测试就会通过。
对于重构现有代码的好处是,您甚至不必担心结果是什么,因为您只关心您没有更改它。
你应该使用Microsoft Coded UI来测试UI层。这涉及编写(或录制)模仿用户执行的操作的测试,并编写断言语句以确保实现正确的输出。
当然,这可能不是单元测试,因为很难从前端创建测试单个工作单元的操作,并且不能替代其他单元测试。我也同意前端业务逻辑应尽可能简单。但是,这将填补您的单元测试未覆盖的任何空白。希望只有小的工作单元未被单元测试覆盖,以便编码UI测试可以捕获其余未经测试的单元。
Coded UI已内置于最新版本的Visual Studio Premium中。我建议您不要仅使用记录功能,而是学习如何自己编写测试,因为这会给您更大的灵活性。
在测试自己的UI控件方面,我使用NUnitForms取得了良好的结果!如果您正在使用标准(或经过充分测试的)UI控件,则我会同意其他人的重构建议。
如果重点是测试实际控件,我会使用NUnitForms,因为它可以扩展以支持您的新控件。无论如何,如果您不想涉及任何手动测试,您将需要一个库来执行显示的最终结果的“基于图像”的分析。
我尝试过TestComplete,但我认为它有点太贵了,因为我可以在c#中编写类似的库来进行图像比较。因此,我的计划是单独测试控件,然后按照其他人提到的方式重构UI。