如何避免使用GoogleTest混合测试和生产代码?

时间:2016-02-25 21:48:50

标签: c++ makefile googletest

我开始使用GoogleTest。它似乎需要一个主文件来运行测试:

Separate test cases across multiple files in google test

但是目前在我的演示应用程序中我已经有了一个主文件:

src/
-> MyType.h
-> main.cpp
-> Makefile

最终将成为我的"生产"应用。我不想用gtest包含,宏等混乱。

我应该在另一个文件夹中创建另一个main.cpp文件,例如:test/,它将包含所有特定的gtest配置,所以我最终会得到:

src/
-> MyType.h
-> main.cpp
-> Makefile // Makefile for producing production code/binaries
Test/
-> MyTypeTest.h // Unittest for MyType
-> main.cpp // The "Test runner"
-> Makefile // Makefile for producing test executable

修改

基于cmake找到了这个:

http://www.kaizou.org/2014/11/gtest-cmake/

这似乎正是我正在寻找的。

3 个答案:

答案 0 :(得分:3)

最明智的方法是为您的生产代码创建一个库,然后是两个可执行文件,一个用于生产,另一个用于测试:

|-lib/
| |-Makefile
| |-mytype.h
| `-mytype.cpp
|-app/
| |-Makefile
| `-main.cpp
`-test/
  |-Makefile
  `-mytypetest.cpp

请注意,gtest发行版为gtest库和gtest_main库提供了测试可执行文件的标准主函数。因此,除非您需要自定义主要(罕见情况),否则您不需要为您的测试提供main.cpp,只需链接到gtest_main即可。 $(CC) mytypetest.cpp -o apptests -lapplib -lgtest_main -lgtest

库方法涉及稍微复杂一点的Makefile,但它在编译时得到了回报,因为没有它意味着你需要为生产应用程序编译一次mytype.cpp,为测试可执行文件编译一次。 / p>

答案 1 :(得分:0)

可能有很多方法可以做到这一点,但一般来说,是的,您应该为项目添加特定于测试的主要功能。这使得编译变得有点复杂,因为你必须生成两个单独的二进制文件(一个用于你的应用程序,另一个用于你的测试),但这是一个相当典型的设置。

答案 2 :(得分:0)

我只需添加一个带有main的test.cpp文件,并在我的makefile中创建一个test目标,这样我就可以make - 构建我的生产代码 - 或{{1} - 构建测试。在实际项目中,我以非常相似的方式使用cmake(我有时会将所有常见依赖项捆绑在make test库中,然后将main和test链接起来。)