2011-05-20 92 views
5

我有一段代码,如果它正在进行单元测试,我不想运行它。我希望找到一些由gtest库设置的#defined标志,我可以检查。我无法找到一个用于该目的,而是通过GTEST头看后,我发现了一个我以为我可以用这样的:如何检查Google Test是否在我的代码中运行

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

这似乎并不为所有的代码工作无论如何运行是否有另一面我可以检查的标志可能有效?

+0

在测试和生产过程中行为不同的代码通常不是一个好主意。如果您提供的代码不是通过测试的代码,那么测试有什么好处? – 2011-05-21 08:00:02

回答

5

谷歌测试不需要或提供自己的构建包装。有时您甚至不必重新编译源文件。您可以将它们与您的测试代码一起链接。您的测试代码会调用您已编译的库代码。你的库代码可能甚至不包括Gtest头文件。

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


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

+0

谢谢,我认为DI可能是最好的方法。 – MahlerFive 2011-05-20 23:57:24

相关问题