如何检查我的代码中是否正在运行Google Test

Mah*_*ive 5 c++ unit-testing googletest

我有一段代码,如果进行单元测试,我不想运行.我希望找到一些由我可以检查的gtest库设置的#defined标志.我找不到一个用于此目的,但在浏览了gtest标题后,我发现了一个我认为可以这样使用的:

SomeClass::SomeFunctionImUnitTesting() {
    // some code here
    #ifndef GTEST_NAME
    // some code I don't want to be tested here
    #endif
    // more code here
}
Run Code Online (Sandbox Code Playgroud)

这似乎不起作用,因为所有代码都运行.还有另一面我可以检查可能有用的旗帜吗?

Rob*_*edy 5

Google Test不需要或提供自己的构建包装器.您甚至不必有时重新编译源文件.您可以将它们与测试代码一起链接.您的测试代码调用已编译的库代码.您的库代码可能甚至不包含和Gtest标头.

如果您希望库代码在测试中以不同方式运行,那么首先需要确保库代码在测试时以不同方式编译.你需要另一个构建目标.在为该构建目标进行编译时,您可以定义一个符号,该符号向您的代码指示它处于测试模式.我会避免使用GTEST该符号的前缀; 留下谷歌自己的代码使用.


实现您正在寻找的东西的另一种方法是使用依赖注入.将您的特殊代码移动到另一个例程中,可能在它自己的类中.将指向该函数或类的指针传递给您的SomeFunctionImUnitTesting函数并调用它.当您测试该代码时,您可以让测试工具将不同的函数或类传递给该代码,从而避免有问题的代码而无需多次编译代码.