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

时间:2011-05-20 21:37:33

标签: 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
}

这似乎不起作用,因为所有代码都运行。还有另一个我可以检查的标志可能有效吗?

2 个答案:

答案 0 :(得分:5)

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

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


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

答案 1 :(得分:1)

main()中:

int main(int argc, char** argv)
{
    testing::InitGoogleTest(&argc, argv);
    setenv("GTEST_RUNNING", "1", true);
    ros::init(argc, argv, "tester");
    return RUN_ALL_TESTS();
}

其他地方:

bool gtestRunning = strcmp(getenv("GTEST_RUNNING"), "1") == 0;
if (gtestRunning)
{
}
else
{
}