谷歌在同一解决方案中测试多个 C++ 项目

GoogleTest several C++ projects in the same solution

我有例如解决方案 SolA 中的 10 个 C++ 项目并希望使用 GoogleTest 对它们进行单元测试:

所以我创建了一个新的解决方案 SolATest 并为 SolA 的每个项目在 SolATest!

中创建了一个单元测试项目

将每个测试项目中 SolATest/Projects 和 运行 中隐含的 SolA 库作为可执行文件加载是否是一种好方法:

#include <iostream>
#include "gmock/gmock.h"
#include "gtest/gtest.h"

int main(int argc, char **argv) 
{   
    ::testing::InitGoogleMock(&argc, argv); 
    int value = RUN_ALL_TESTS();

    std::getchar(); // to hold the terminal open

    return value;
}

或者是否有更方便的方式 -> 例如在 SolATest 中只有一个可执行文件并将其他测试项目作为库加载(恕我直言,将所有 cpp 文件都放在一个测试项目中令人困惑)?!

感谢任何帮助

这两种方法都应该有效;这仅取决于您的喜好。我倾向于遵循如下项目结构:

Solution
 |-- ProjectA 
 |-- ProjectATests
 |-- ProjectB
 |-- ProjectBTests
 `-- TestLib

其中项目(ProjectA、ProjectB)是库,每个测试项目(ProjectATests、ProjectBTests)是可执行文件。请注意,我们不是将单元测试分离到一个单独的解决方案中;它们总是与生产代码一起构建并且运行。我喜欢这种结构有几个原因:

  1. 只运行与您的更改相关的测试会更容易。
  2. 开发工作流程更高效一些,因为在对一个库进行更改时,您只需重新构建和link 相应的测试。

无论您创建单个测试项目还是多个测试项目,我绝对建议将项目放在与被测代码相同的解决方案中。此外,我建议为测试项目设置一个 post-构建步骤,其中 运行 进行测试,如果未通过则构建失败。

最后,您可能想知道 'TestLib' 项目。我将其用于 gtest/gmock 融合源、main() 的定义以及在测试之间共享的任何其他实用程序。这消除了(或至少减少了)各种测试项目之间的代码重复。