【问题标题】:Creating one binary for multiple unit tests in Google's C++ Testing Framework在 Google 的 C++ 测试框架中为多个单元测试创​​建一个二进制文件
【发布时间】:2015-05-07 11:43:20
【问题描述】:

目前我有一个test 文件夹,其中包含每个测试的多个源文件。在 CMake 上,我之前为每个源文件定义了一个二进制文件,但我决定现在应该将所有这些文件合并到一个二进制文件中,并利用 GTest 中的过滤器来选择我想要运行的测试。这些源文件都没有 main() 函数,但我猜 GTest 框架只是在运行时隐式调用它。

所以现在我创建了一个测试管理器源文件,它除了调用InitGoogleTestsRUN_ALL_TESTS()main() 之外什么都没有,并且包含所有测试源文件。根据 Google 的说法,这是“不得已而为之”。

然后我应该如何正确地做到这一点?我真的应该为每个测试源创建头文件并在那里编写声明,然后将所有这些头包含在我的测试管理器源中吗?有没有其他...更容易...的方式来做到这一点?

【问题讨论】:

    标签: c++ unit-testing cmake googletest


    【解决方案1】:

    不,您不需要对这些文件做任何特别的事情...

    您的所有TEST_F 和类似的宏都将链接在一起并运行。这是 googletest 的魔法……

    实际上,您不需要带有 main() 的“测试管理器源” - 只需使用您的 googletest/googlemock 分发中的文件:

    gmockxxx/src/gmock_main.cc

    gtestxxx/src/gtest_main.cc

    【讨论】:

      【解决方案2】:

      将测试所需的所有源文件和头文件包含在一个项目中。您不需要包含“主”源文件,除非在 gtest 初始化之前需要进行一些特殊设置。只需将您的测试项目与两个 GTest 库链接:

      -lgtest -lgtest_main
      

      后者gtest_main 库包含基本的main() 函数。

      GTest Primer: Writing the main() function中有描述


      您可能会遇到这样的情况,即您测试的每个类都依赖于多个源文件(其他帮助类)。您希望将这些经过测试的类保存在单独的可执行文件中以测试清洁度,以确保它们中的每一个都只使用需要的文件,而不依赖于其他经过测试的类使用的文件。此解决方案还可以减少编译时间。

      在这种情况下,您必须创建自己的测试运行程序来执行所有测试可执行文件,并可能打印其中哪些有错误。使用 Bash 或 Python 很容易做到这一点。

      【讨论】:

        猜你喜欢
        • 2013-01-20
        • 1970-01-01
        • 2010-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多