C# 带有视图模型或编码ui测试的单元测试

C# 带有视图模型或编码ui测试的单元测试,c#,wpf,unit-testing,mvvm,coded-ui-tests,C#,Wpf,Unit Testing,Mvvm,Coded Ui Tests,目前我想改进测试用例。由于我们已经使用MVVM切换到WPF,我正在考虑编写单元测试来处理视图模型(测试视图模型),或者更好地使用编码的ui测试。选择什么,或者测试这两件事的方法是什么?目前我找不到任何实际的答案,也许有人有一个直截了当的答案 谢谢大家! 单元测试和UI/系统测试是非常不同的事情,目的非常不同 单元测试应该在单元级别测试应用程序的正确行为(例如,给定输入x和y,此方法应该返回值z),并且您可能会有很多这样的测试(在大型项目中可能有数百个,如果不是数千个或数万个) 单元测试应该编写得

目前我想改进测试用例。由于我们已经使用MVVM切换到WPF,我正在考虑编写单元测试来处理视图模型(测试视图模型),或者更好地使用编码的ui测试。选择什么,或者测试这两件事的方法是什么?目前我找不到任何实际的答案,也许有人有一个直截了当的答案


谢谢大家!

单元测试和UI/系统测试是非常不同的事情,目的非常不同

单元测试应该在单元级别测试应用程序的正确行为(例如,给定输入x和y,此方法应该返回值z),并且您可能会有很多这样的测试(在大型项目中可能有数百个,如果不是数千个或数万个)

单元测试应该编写得小巧、快速,并且可以独立于外部依赖项(如数据库、web服务、文件系统、当前日期/时间、,理想情况下,它们应该以这样一种方式编写,即它们失败的唯一可能原因是它们正在测试的代码以某种方式发生了更改,从而破坏了预期的行为

好的测试应该经常运行,最好是每次开发人员在本地构建代码时,然后在提交代码后的CI过程中再次运行。一大套UI测试根本不允许您这样做。您希望频繁运行测试的原因是,您现在发现的bug比您以后发现的bug更容易修复:开发人员在编写代码时要处理大量的上下文信息。如果他们按下“构建”按钮,几秒钟后一个测试弹出失败,他们就不会失去上下文,并且可以很容易地修复错误

如果他们在3小时后发现3小时前编写的代码有bug,那么他们可能已经转移到另一个任务,并失去了很多上下文。恢复所有上下文需要时间,这意味着修复bug需要更长的时间。此外,他们可能不得不搁置正在处理的任何新任务,导致他们也失去了该任务的上下文,在修复错误后,他们将不得不重新开始

这里的核心思想是单元测试应该是可重复的一致的。你不能信任的测试是你忽略的测试,而你忽略的测试是完全无用的

编码的UI(以及与UI交互的所有其他类型的测试)在各个方面几乎与单元测试完全相反:它们非常慢(几十秒而不是毫秒),它们依赖于整个系统作为一个整体正确地配置和部署,并且非常脆弱,容易发生随机故障。它们通常只能用作冒烟测试,以确保应用程序已正确部署,从而验证应用程序中的几个关键路径


如果您试图通过UI验证业务逻辑和正确的应用程序行为,那么您正在为自己设置一个痛苦的体验。测试速度太慢,无法频繁运行,对应用程序的更改将需要不断的临时看护和修复由于更改而中断的UI测试

对于UI测试,您应该使用TestComplete之类的UI测试程序。对于模型视图测试,MSDN有几篇论文,例如:好答案,单元测试是开发的方法,甚至可能是TDD。编码的用户界面很容易使用,但需要花费大量时间来维护。回答得很好,谢谢。这就是我喜欢stackoverflow的原因:)