在同一个解决方案中 GoogleTest 多个 C++ 项目

leo*_*n22 1 c++ unit-testing googletest visual-studio

我在一个解决方案中有 10 个 C++ 项目,SolA并且想用 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;
}
Run Code Online (Sandbox Code Playgroud)

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

感谢任何帮助

Ian*_*Ian 5

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

Solution
 |-- ProjectA 
 |-- ProjectATests
 |-- ProjectB
 |-- ProjectBTests
 `-- TestLib
Run Code Online (Sandbox Code Playgroud)

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

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

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

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