2016-02-25 110 views
2

我开始使用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/

这似乎正是我正在寻找。

+0

在项目变大之前,您可能想切换到其他构建系统。除非您已经有很多管理makefile的经验,否则Makefiles往往会为更大的项目而烦恼。 – smerlin

+0

我倾向于为每个项目/库设置一个测试子目录,并为每个测试源文件生成一个谷歌测试二进制文件。这样,即使一个测试用例导致应用程序崩溃,所有其他测试和测试用例仍会运行。 (我使用'CMake'作为构建工具,并使用'ctest'来运行所有测试) – smerlin

+0

我一直喜欢将测试的想法放在单独的目录中。 –

回答

2

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

|-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 S,但是在编译时间不负有心人,因为没有它意味着你需要编译mytype.cpp一次生产中的应用,并一次测试可执行文件。

+0

是的,它是这样的,我想到了,我发现这个:http://www.kaizou.org/2014/11/gtest-cmake/,提供了更多的细节像你一样的结构建议使用cmake。我会尝试一下。 – u123

+0

这是我目前主要C++项目的源代码结构。如果您打算使用cmake,您可以从其ExternalProject模块中获益,以将gtest库导入到您的项目中。找到这个[这里]的示例(https://github.com/apbarrero/cpp-utest/blob/master/test/CMakeLists.txt)。 –

+0

酷会看看!顺便说一句你用什么编辑器?我想与Git集成,并能够建立/运行一个点击/短键,所以我尝试了Eclipse,但它并没有真正做我想要的:http://stackoverflow.com/questions/35668159/cmake- 3-2-2-eclipse-4-5-1-cdt-8-0也许我在这里有点太野心勃勃/需要去寻求更简单/更人工的方法? – u123

0

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

+0

确实有意义,正在考虑在src /和test /文件夹的上一级创建一个makefile文件,然后像在其中创建一个测试和产品目标,“make test”会创建测试可执行文件,“make prod”会创建prod可执行文件是针对所有约定还是合理的? – u123

+0

听起来很合理,当然。我所使用的大多数Makefile项目都为测试和生产可执行文件定义了不同的目标。即'make bin'将创建生产二进制文件,'make tests'将创建测试可执行文件,'make runtests'将运行测试等。尽管对于比玩具项目更大的任何项目,我都会建议寻找CMake。它比手动编辑Makefiles好多了:) – Ian

0

我只需添加一个主一个TEST.CPP文件,并在我的makefile创建test目标,这样我既可以make - 打造我的生产代码 - 或make test - 建立测试。在实际的项目中,我以非常相似的方式使用cmake(我有时将所有常见的依赖关系捆绑在一个core.a库中,然后将main和test连接起来)。

相关问题