Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net Windows窗体的Visual Studio单元测试_.net_Winforms_Visual Studio 2008_Unit Testing_Nunit - Fatal编程技术网

.net Windows窗体的Visual Studio单元测试

.net Windows窗体的Visual Studio单元测试,.net,winforms,visual-studio-2008,unit-testing,nunit,.net,Winforms,Visual Studio 2008,Unit Testing,Nunit,我们正在VisualStudio2008中进行一个项目。我们正在使用随附的内置测试套件(Microsoft.VisualStudio.TestTools.UnitTesting命名空间)。事实证明,让我们非常懊恼的是,大量的复杂性(以及由此产生的错误)最终被编码到了我们的UI层。虽然我们的单元测试在覆盖业务层方面做得不错,但我们的UI层一直是一个恼人的来源。理想情况下,我们也希望进行单元测试。有人知道在VisualStudio中有一种很好的“与Microsoft兼容”的方法吗?它会不会给“混合”

我们正在VisualStudio2008中进行一个项目。我们正在使用随附的内置测试套件(Microsoft.VisualStudio.TestTools.UnitTesting命名空间)。事实证明,让我们非常懊恼的是,大量的复杂性(以及由此产生的错误)最终被编码到了我们的UI层。虽然我们的单元测试在覆盖业务层方面做得不错,但我们的UI层一直是一个恼人的来源。理想情况下,我们也希望进行单元测试。有人知道在VisualStudio中有一种很好的“与Microsoft兼容”的方法吗?它会不会给“混合”单元测试框架带来一些冲突,比如微软的东西?对于单元测试表单,我是否应该注意一些明显的陷阱?

您需要重构UI,以便UI不需要任何单元测试。UI应包含最少的业务逻辑或不包含业务逻辑。有许多模式处理这个问题。Martin Fowler有一篇很好的文章解释了很多关于这些模式的内容:

Martin Fowler的重构书中有一小章谈到重构不可测试的UI。您还可以阅读并有效地使用遗留代码


注意:有一些工具可用于自动化UI测试。我想到了丝绸测试。但是如果可能的话,我不会使用它们。

我使用这里详述的被动视图体系结构

基本上,将表单中的所有代码移动到一个称为xxxUI的单独类中。表单然后实现一个IxxxUI接口,并公开xxxUI类需要的任何内容。您可能可以简化事情并将处理多个控件的操作聚合到一个方法中

然后,当用户单击一个按钮时,该流就会消失。该按钮调用相应UI类上的方法。传递任何需要的参数。UI类方法修改模型。然后使用界面更新UI


对于单元测试,您可以让测试类或虚拟类实现接口,并向UI类注册它们自己。您可以让这些测试类触发任何类型的输入并相应地响应。通常我有序列表,它们按照精确的顺序做事情。(点击A,点击这个,滚动那个,然后键入B,等等)。

查看Jeremy D.Miller的WIP以获取重构灵感:)


Miller正在写一本书,看起来它将是这类事情的必备品。

这对于常规的应用程序单元测试来说都很好。。。但是,如果您正在构建需要对控件行为和状态进行单元测试的用户控件,那么它也需要一个单元测试框架。NUnitForms可能是您的答案-我个人需要亲自检查一下。

在测试自己的UI控件时,我使用过NUnitForms,效果很好!若您使用的是标准(或经过良好测试的)UI控件,我同意其他人关于重构的看法

如果重点是测试实际控件,我会使用NUnitForms,因为它可以扩展以支持新控件。无论如何,如果不涉及任何手动测试,您将需要一个可以对显示的最终结果进行“基于图像”分析的库


我已经为此尝试了TestComplete,但我认为它有点太贵了,因为我可以编写一个类似的库,用于c#中的图像比较。因此,我的计划是单独测试控件,然后按照前面提到的重构UI。

使用ApprovalTests(www.ApprovalTests.com或nuget approval tests)测试Winforms非常容易,而且它们与MsTest以及Nunit兼容

这里有一段视频介绍如何做到这一点:

但过程很简单。 1) 在希望验证的状态下创建要测试的表单。 2) 调用WinFormApprovals.Verify(表单)

ApprovalTests使用golden master范例来截屏结果。如果喜欢,只需将文件重命名为.approved,测试就会通过


对于重构现有代码来说,这样做的好处是,您甚至不必担心结果会是什么,因为您只关心您不会更改它。

您应该使用Microsoft编码的UI来测试UI层。这包括编写(或记录)模拟用户将执行的操作的测试,以及编写断言语句以确保获得正确的输出

当然,这不是单元测试,这是有争议的,因为很难从前端创建测试单个工作单元的操作,并且不能替代其他单元测试。我也同意前端业务逻辑应该尽可能精简。然而,这将填补单元测试没有覆盖的空白。希望只有小的工作单元不会被单元测试覆盖,这样编码的UI测试将捕获剩余的未测试单元


编码用户界面内置于最新版本的Visual Studio Premium中。我建议您不要只使用记录功能,而是要学习如何自己编写测试,因为这给了您更大的灵活性

对于Windows 10,Microsoft现在推荐使用带WinAppDriver的Appium。VS2019将是最后一个包含微软编码用户界面的版本


完全同意。花时间从UI中提取逻辑,并对业务层进行单元测试。这样,您就可以将业务层插入web应用程序或WPF应用程序,而无需更改单元测试。UI测试应该由人来完成,测试不可量化的东西(例如,看起来更好)。事实上,很多UI逻辑都与UI有关,甚至与业务无关。它的功能包括“当记录变脏并且用户更改屏幕时提示用户保存”和“确保用户在按OK时填写了所有必需的数据输入字段”以及其他控件在我建议的文章中取消HumbleDialog和PassiveView。。它将在presenter中去掉所有的UI逻辑,UI将变得非常愚蠢,并且很容易通过查看来测试