在Google的C ++测试框架中为多个单元测试创​​建一个二进制文件

时间:2015-05-07 11:43:21

标签: c++ unit-testing cmake googletest

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

所以现在我创建了一个测试管理器源文件,除了调用main()InitGoogleTests的{​​{1}}之外什么都没有,并且包含所有测试源文件。根据谷歌的说法,这是一种“无论如何都要使用的黑客”。

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

2 个答案:

答案 0 :(得分:1)

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

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

实际上你不需要这个"测试经理来源"使用main() - 只需使用googletest / googlemock distrubution中的文件:

  

gmockxxx / SRC / gmock_main.cc

  

gtestxxx / SRC / gtest_main.cc

答案 1 :(得分:0)

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

-lgtest -lgtest_main

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

GTest Primer: Writing the main() function

中对此进行了描述

您可能有一个案例,其中每个测试类依赖于多个源文件(其他帮助程序类)。您希望将这些经过测试的类保存在单独的可执行文件中以测试清洁度,以确保它们中的每一个都只使用所需的文件,并且不依赖于其他测试类使用的文件。此解决方案还可能缩短编译时间。

在这种情况下,您必须制作自己的测试运行器来执行所有测试可执行文件,并可能打印其中哪些存在错误。这很容易用Bash或Python。