c++ - 单元测试 MFC UI 应用程序?

标签 c++ unit-testing user-interface mfc tdd

如何对大型 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)。

编辑:如果您考虑一下:如果应用程序的结构不是这样,您应该非常仔细地重构。没有其他技术可以测试逻辑。模拟点击的脚本只是表面上的。

其实很简单:

假设您的控件/窗口/任何东西在用户单击按钮时会更改列表框的内容,并且您希望确保单击后列表框包含正确的内容。

  1. 重构,以便有一个单独的列表,其中包含要显示的列表框的项目。这些项目存储在列表中,并且不会从您的数据来源中提取。使列表框列表事物的代码只知道新列表。
  2. 然后创建一个包含逻辑代码的新 Controller 对象。处理按钮点击的方法只调用mycontroller->ButtonWasClicked()。它不知道列表框或其他任何东西。
  3. MyController::ButtonWasClicked() 为预期的逻辑做了需要做的事情,准备项目列表并告诉控件更新。为此,您需要通过为控件创建接口(interface)(纯虚拟类)来解耦 Controller 和控件。 Controller 只知道该类型的对象,而不知道控件。

就是这样。 Controller 包含逻辑代码并且仅通过接口(interface)知道控制。现在您可以通过模拟控件为 MyController::ButtonWasClicked() 编写常规单元测试。如果您不知道我在说什么,请阅读 Michaels 的文章。两次。在那之后又一次。
(提醒自己:一定要学会不要胡说八道)

关于c++ - 单元测试 MFC UI 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/107591/

相关文章:

C++ MySQL Sql语法错误而语法正确

c - (C语言)基于AES-CTR的加密解密工具中的乱码解密

java - 带有复杂编辑器的 JTable

unit-testing - 如何配置vs2012只保留最新的测试结果?

java - 模拟需要在单元测试中测试的同一类的静态方法

python - WebTest:使用装饰器+数据存储调用进行测试

php - 将我的php登录屏幕连接到我的SQL DB

c++ - 使用 map::find 查找键并返回值

c++ - 阵列已删除或损坏

c++ - 如何使用 directshow 执行进程间(非线程)流共享?