【问题标题】:Unit testing with QTestLib使用 QTestLib 进行单元测试
【发布时间】:2012-08-20 23:42:36
【问题描述】:

我正在尝试使用 QTestLib 对我的 Qt 应用程序进行单元测试。我看到新的 Visual Studio 2012 有一个内置的 C++ 测试框架并通过谷歌搜索我看到this 页面讨论了测试本机项目的不同方法。我将有两个不同的项目,一个用于正常程序,一个用于测试。实际上,我的应用程序不是 DLL,而是一个简单的 C++ exe。用另一个项目来测试它以链接到 .obj 文件或库的最佳方法是什么?我不会从源代码中导出任何内容,因为我的不是 DLL

【问题讨论】:

  • 假设您使用 qmake 作为构建工具。重复使用目标文件会使执行存根变得困难,因为您必须将测试单元的原始目标文件与存根的目标文件混合。为了使它成为可能,您需要将所有目标文件放在单独的目录中,即。例如,每个目录的每个单元。其他方法是生成一组静态库并在测试中重新使用它们。并且只是简单地在测试中包含源代码,它将被编译和链接两次。
  • 我的应用程序是一个 EXE,我如何将它构建为一个静态库?但是我使用的是 Visual Studio,但我计划支持多个平台,因此未来的测试也应该在 Linux 上运行
  • 只要你的架构中有独立的单元,你可以将它们拆分为独立的库。例如,任何自定义小部件或一组小部件都可以是一个单独的库。然后您将拥有一个主单元,它将所有其他单元粘合在一起并与代表它们的库链接。

标签: c++ unit-testing qt4 qtestlib


【解决方案1】:

这是一个典型的 QtTest 项目,包含三个代码单元:unit1、unit2 和 unit3

    project/
    ├── project.pro
    ├── src
    │   ├── main.cpp
    │   ├── src.pro
    │   ├── unit1.cpp
    │   ├── unit1.h
    │   ├── unit2.cpp
    │   ├── unit2.h
    │   ├── unit3.cpp
    │   └── unit3.h
    └── tests
        ├── stubs
        │   ├── stubs.pro
        │   ├── unit1_stub.cpp
        │   ├── unit2_stub.cpp
        │   └── unit3_stub.cpp
        ├── test1
        │   ├── test1.cpp
        │   ├── test1.h
        │   └── test1.pro
        ├── test2
        │   ├── test2.cpp
        │   ├── test2.h
        │   └── test2.pro
        ├── test3
        │   ├── test3.cpp
        │   ├── test3.h
        │   └── test3.pro
        └── tests.pro

该项目产生 4 个二进制文件:1 个应用程序本身和三个用于测试每个单元的测试二进制文件。例如,test1 应该包括 src/unit1.cpp、src/unit1.h 以及存根 unit2 和 unit3:src/unit2.h、tests/stubs/unit2_stub.cpp、src/unit2.h、tests/stubs/unit3_stub。 cpp。使用这种设置 src/unit1.cpp 和 tests/stubs/unit1_tests.cpp 将被编译两次,如果单元数会更大,这个数字会增长。这对于小型项目来说不是问题,但对于大型项目,这可能会导致构建时间显着增加。

然后将 unitX.cpp 和 unitX.h 拆分为单独的库,并静态链接到主应用程序,每个测试将无需多次构建。

【讨论】:

  • 感谢您的解释,我尝试使用 QtTestLib,但它似乎没有扩展点,因此我无法将它与 TeamCity 实时测试日志集成。此外,它似乎使用旧的 xunit XML 格式来输出日志文件。如果我不乐意使用未真正与 Qt 集成的东西,我想我也会坚持使用谷歌测试
  • 我刚刚发现 TeamCity 可以使用 XML Report Plugin 读取 XML 测试报告。而QtTest会产生XML输出,如果给定-xml选项,相反,-xunitxml会产生xunit输出。
  • 我知道它可以读取 XML,但我想要实时报告而不是构建后的测试结果。此外,QtTestLib 似乎使用的是旧格式,我不确定它是否完全兼容 xunit
  • 您想使用 -xml 选项来实现 xunit 兼容性。见stackoverflow.com/questions/13339513/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-10
  • 2011-05-12
  • 2012-08-22
  • 1970-01-01
  • 2012-04-29
  • 1970-01-01
相关资源
最近更新 更多