如何对大型 MFC UI 应用程序进行单元测试?
我们有一些大型 MFC 应用程序已经开发多年,我们使用一些标准的自动化 QA 工具来运行基本脚本来检查基础、文件打开等。这些是由 QA 小组在每日构建后运行的。
但我们希望引入一些程序,以便个人开发人员在将代码提交到日常构建之前,可以针对应用程序的对话框、菜单和其他可视元素构建和运行测试。
我听说过这样的技术,例如仅在调试版本中出现的对话框上的隐藏测试按钮,是否有任何标准工具包。
环境是 C++/C/FORTRAN、MSVC 2005、Intel FORTRAN 9.1、Windows XP/Vista x86 和 x64。
最佳答案
这取决于应用程序的结构。如果逻辑和 GUI 代码是分开的 (MVC),那么测试逻辑很容易。看看 Michael Feathers "Humble Dialog Box" (PDF)。
编辑:如果您考虑一下:如果应用程序的结构不是这样,您应该非常仔细地重构。没有其他技术可以测试逻辑。模拟点击的脚本只是表面上的。
其实很简单:
假设您的控件/窗口/任何东西在用户单击按钮时会更改列表框的内容,并且您希望确保单击后列表框包含正确的内容。
- 重构,以便有一个单独的列表,其中包含要显示的列表框的项目。这些项目存储在列表中,并且不会从您的数据来源中提取。使列表框列表事物的代码只知道新列表。
- 然后创建一个包含逻辑代码的新 Controller 对象。处理按钮点击的方法只调用mycontroller->ButtonWasClicked()。它不知道列表框或其他任何东西。
- MyController::ButtonWasClicked() 为预期的逻辑做了需要做的事情,准备项目列表并告诉控件更新。为此,您需要通过为控件创建接口(interface)(纯虚拟类)来解耦 Controller 和控件。 Controller 只知道该类型的对象,而不知道控件。
就是这样。 Controller 包含逻辑代码并且仅通过接口(interface)知道控制。现在您可以通过模拟控件为 MyController::ButtonWasClicked() 编写常规单元测试。如果您不知道我在说什么,请阅读 Michaels 的文章。两次。在那之后又一次。
(提醒自己:一定要学会不要胡说八道)
关于c++ - 单元测试 MFC UI 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/107591/