如何有效地在 googletest 中组织单元测试

How to organize unit tests in googletest efficiently

我目前正在考虑重构我项目中的单元测试。我使用 Googletest 作为测试框架。我的项目由几个一起构建和测试的共享库组成。

随着单元测试数量的增加,我发现 google 测试中单元测试的组织变得越来越难,因为我在测试所在的位置包含了大量头文件。这会导致在构建项目时出现巨大的对象大小,我已经不得不打开 大对象编译 ,以使构建成功。

考虑如下所示的项目结构

root
├── src
│   └── libs
|       ├── libA
|       ├── libB
|       ├── ....
│       └── libN   
└── tests
    └── unit_tests
        ├── libA
        |   ├──tst_group1.h
        |   ├──tst_group2.h
        |   └──tst_group3.h
        ├── libB
        |   ├──tst_group1.h
        |   ├──tst_group2.h
        |   └──tst_group3.h
        ├── ....
        ├── libN
        └── main.cpp

我的 main.cpp 看起来像这样:

#include "libA/tst_group1.h"
#include "libA/tst_group2.h"
#include "libA/tst_group3.h"
#include "libB/tst_group1.h"
#include "libB/tst_group2.h"
#include "libB/tst_group3.h"
[...]
#include <gmock/gmock-matchers.h>
#include <gmock/gmock.h>
#include <gtest/gtest.h>

int main(int argc, char* argv[])
{
    :testing::InitGoogleMock(&argc, argv);
    ::testing::InitGoogleTest();
    return RUN_ALL_TESTS();
}

我真的很想在这里进行某种模块化,在这里我可以以某种方式拆分代码,最终为不同的模块提供单独的编译单元,这样我就没有这个丑陋的 大对象编译问题,但是我不知道使用google测试的正确方法是什么,其中所有这些测试宏都必须存在于头文件中。

谁能分享一些建议?

如果您查看 the samples provided in the sources,测试宏不应出现在 header 文件中。 根据 this answer :

The RUN_ALL_TESTS() macro run all instances of test class dynamically, which means it got the test cases during run time.

所以基本上,您的 main 应该只包含 gtest headers,您的测试应该在 .cpp 文件中,每个测试只包含您需要的库。