我正在接管具有巨大gtest套件的项目。我正在添加额外的测试。下面是我之前设置的方式。所有可测试的类都在头文件中,并包含在main.cpp(测试套件运行程序)中。 问题是,尝试使用大量包含的文件编译main.cpp时,编译器用完了内存。这样做的“正常”方法是将测试类放在单独的文件中,因为gtest通过宏扩展查找测试类。认为gtest会随着订阅者的加入而出现某种单例。 有人可以向我解释为什么以前的维护者在头文件中有测试类吗?优点和缺点请参见在头文件中包含测试类的代码示例。 //文件ZondTest.hpp
class ZondTest : public ::testing::Test
{
public:
static const std::string INPUT_FILES_DIR;
protected:
virtual void SetUp() //runs this set up before every test
{
//might put something here later if I need to
}
};
const std::string ZondTest::INPUT_FILES_DIR =
"InputFiles/ZondManagerTest/";
class TestableZond_c : public Zond_c
{
public :
TestableZond_c()
{
}
virtual ~TestableZond_c()
{
}
};
//check if newly created zond has empty space
TEST(ZondTest,
WhenCreatedNewZondWithoutSpaceExpectEmptySpace)
{
TestableZond_c mTestableZond = TestableZond_c();
EXPECT_TRUE(mTestableZond.SpaceEmpty());
}
// a tone more tests
// ....
包含在main.cpp中。
#include "RD/ZM/ZondTest.hpp"
//many more includes
//........
int main(int argc, char **argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
答案 0 :(得分:1)
我不确定将测试用例放在.hpp文件而不是.cpp文件中(例如,将FnordTest
类放在FnordTest.hpp
而不是FnordTest.cpp
中会带来什么好处?
编译器(通常)不会为标头创建目标文件,因此有必要在main.cpp中包含所有这些.hpp
文件,这可能会导致单个超大编译单元,从而导致编译器-如您所说-内存不足(尤其是在考虑googletest的宏魔术时)。
我只建议将测试放入.cpp
文件中-这样,您甚至不需要包括它们; googletest自动查找您用TEST_P / TEST_F等声明的所有测试。
答案 1 :(得分:0)
我发现的一件事是,如果您使用的是Eclipse,则indexer无法找到一种方法来绑定googletest自动找到的文件。因此,文件的所有下划线都显得混乱。但是,如果将TEST_P / TEST_F放入头文件并将其包含在main中。 Eclipse索引器可以“抓取”包含的文件并构建索引,它看起来很漂亮,并且错误地认为这是正确的方法。