我们正在开发一个大型项目,其中包含一些新的/修改的 GUI 功能。过去我们发现,在添加新功能时,我们经常会在相关代码中引入新问题。
我们有非技术用户执行测试,但他们经常遗漏部分内容并让错误溜走。
是否有组织 WinForms 项目的 UI 测试的最佳实践?有没有办法让它自动化?
我们正在开发一个大型项目,其中包含一些新的/修改的 GUI 功能。过去我们发现,在添加新功能时,我们经常会在相关代码中引入新问题。
我们有非技术用户执行测试,但他们经常遗漏部分内容并让错误溜走。
是否有组织 WinForms 项目的 UI 测试的最佳实践?有没有办法让它自动化?
有 GUI 测试工具可以为您单击按钮和东西,但根据我的经验,它们非常脆弱。
最好的办法是让你的 UI 层尽可能的薄。您的事件处理程序类最好只有一两行调用其他更可测试的类。这样您就可以在单元测试中测试您的业务逻辑,而无需实际单击按钮。
您可以使用White框架自动执行 GUI 测试。
还要考虑使用TDD 友好的设计,即使用MVP/MVC模式。
我强烈建议您阅读 Microsoft 模式和实践团队的文档。
尤其是看看Composite UI 应用程序块和CompositeWPF。
这些项目专门设计用于为您提供 GUI 应用程序开发的最佳实践,包括测试驱动的 UI。
保持 GUI 层尽可能薄。Michael Feathers 的文章The Humble Dialog Box是经典之作。另请查看 Martin Fowler 的被动视图。我还听说“自动按钮点击器”很脆弱,而且很容易花更多的时间来维护测试而不是花在维护代码上。
如果有人觉得这很有用:
在 Wikipedia 上找到的 GUI 测试工具列表。
下面的书是对该主题的介绍。有多少开发者就有多少种方法。
http://pragprog.com/titles/idgtr/scripted-gui-testing-with-ruby
有许多工具和库可以自动执行 WinForms 测试,从 White 等开源解决方案到 HP QuickTest Pro 等昂贵的商业解决方案。如果您想推出自己的自动化框架,.NET 中还有 UIAutomation 命名空间。但自动化的真正成本在于实施所需的时间和专业技能。可维护性也是自动化测试设计最重要的方面之一;您不想花费过多的资源使自动化资产与您的应用程序保持同步。还有许多因素会影响自动化决策,这些因素将特定于您的特定应用程序和组织。
您最好的选择是对该主题进行更多研究,并查看一些专门的测试站点,例如http://www.sqaforums.com。
我发现了这种在各种浏览器中测试网页布局的快速而肮脏的方法。它被称为browsershots.org。我们的客户现在需要 5 个浏览器的支持,而完整的回归测试需要大约一周的时间。该服务将提供大约 70 多个浏览器和版本的屏幕截图。我把它们打印出来,然后把它们放在灯光下。如果它们不对齐,则必须存在布局问题。
我无法真正帮助组织或最佳实践,但NUnit扩展似乎可用于表单测试NUnitForms。
几年前,我使用了类似于本产品 ( http://www.tethyssolutions.com/product.htm ) 和本产品 ( http://www.mjtnet.com/macro_scheduler.htm ) 的试用版下载,我对结果。这些都是非常便宜的解决方案,其中一些宏记录器产品实际上可以用于自动化测试。
现在可用的一种新方法是通过名为win32-autogui的 Ruby gem 使用 Ruby 。这为测试 Windows GUI 应用程序提供了一个框架。将它与 Ruby 工具 RSpec 和 Cucumber 相结合,它构成了一个非常强大的测试框架。
如何组织 UI 测试取决于您如何设计测试用例。
在单元测试级别自动化 Windows Forms 应用程序可以使用 TDD 框架,例如 NUnit;或者使用 BDD 框架,例如 NSpec。
在功能测试级别自动化 Windows 窗体应用程序可以使用 White、CodedUI,甚至直接使用Windows 自动化 API 3.0(UI 自动化和 MSAA)。
由于上面提到的所有这些东西都是技术而不是解决方案,因此最好在开始编写自动化测试之前基于这些技术构建一些基本的测试自动化/脚本框架。