3

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

4

1 回答 1

2

这是一个典型的 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 拆分为单独的库,并静态链接到主应用程序,每个测试都将消除多次构建的需要。

于 2012-09-03T09:55:08.793 回答