如何对大型 MFC UI 应用程序进行单元测试?
我们有一些大型 MFC 应用程序已经开发了很多年,我们使用一些标准的自动化 QA 工具来运行基本脚本来检查基础知识、文件打开等。这些由 QA 小组在日常构建后运行。
但我们希望引入一些程序,以便个人开发人员可以在将代码提交到日常构建之前针对应用程序的对话框、菜单和其他可视元素构建和运行测试。
我听说过诸如在对话框上隐藏测试按钮之类的技术,这些按钮仅出现在调试版本中,是否有任何标准工具包可以实现这一点。
环境为 C++/C/FORTRAN、MSVC 2005、Intel FORTRAN 9.1、Windows XP/Vista x86 和 x64。
这取决于应用程序的结构。如果逻辑和 GUI 代码是分离的 (MVC),那么测试逻辑就很容易。看看迈克尔·羽毛《不起眼的对话框》 https://web.archive.org/web/20080509080327/http://www.objectmentor.com/resources/articles/TheHumbleDialogBox.pdf (PDF).
编辑:如果您考虑一下:如果应用程序不是这样构造的,您应该非常仔细地重构。没有其他技术可以测试逻辑。模拟点击的脚本只是触及表面。
这实际上很简单:
假设当用户单击按钮时,您的控件/窗口/任何内容都会更改列表框的内容,并且您希望确保单击后列表框包含正确的内容。
- 重构以便有一个单独的列表,其中包含列表框要显示的项目。这些项目存储在列表中,并且不会从您的数据来源中提取。使列表框列出内容的代码仅了解新列表。
- 然后创建一个新的控制器对象,其中将包含逻辑代码。处理按钮单击的方法仅调用 mycontroller->ButtonWasClicked()。它不知道列表框或其他任何东西。
- MyController::ButtonWasClicked() 执行预期逻辑所需的操作,准备项目列表并告诉控件进行更新。为此,您需要通过为控件创建接口(纯虚拟类)来解耦控制器和控件。控制器只知道该类型的对象,而不知道控件。
就是这样。控制器包含逻辑代码并且仅通过接口了解控制。现在您可以通过模拟控件为 MyController::ButtonWasClicked() 编写常规单元测试。如果您不知道我在说什么,请阅读迈克尔斯的文章。两次。之后又是这样。
(告诫自己:一定要学会不废话)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)