GoogleTest测试在单独的库中声明

时间:2018-09-28 11:50:30

标签: testing compilation googletest

我有很多使用GoogleTest框架自动生成的测试。 当前,每个测试都位于一个.cpp文件中,该文件包含在一个较大的“ Tests.cpp”文件中,然后该文件包含在主文件中。 尝试全部编译时,我的计算机死机了。 我认为这是因为它试图将它们编译到单个输出文件中。 有没有一种方法可以以“正常”方式编写每个测试夹具,为每个测试夹具/案例提供一个输出文件,然后将它们链接起来?

谢谢

2 个答案:

答案 0 :(得分:0)

目前还不清楚您在做什么。通常在C ++中,您不应包含cpp文件。我们需要您从编译器获得的输出。

一种常见的方法是为一个测试装置和相关的测试用例拥有一个编译单元(一个cpp和一个头文件)。

GoogleTest仅仅是具有大量复杂宏的C ++库。通常使用C ++编程规则。

答案 1 :(得分:0)

使用GoogleTest的“正常”方法是将测试与您要测试的项目放在一个单独的项目中,即,如果您要测试项目 Foo ,则应将测试放在(例如) FooTest 项目。

FooTest 项目中,主程序应如下所示:

#include "gtest/gtest.h"

int main(int argc, char** argv)
{
    ::testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}

单个测试应如下所示:

#include "gtest/gtest.h"
#include "IntComparer.h"

namespace
{
class IntComparerTest : public ::testing::Test
{
  protected:
    IntComparerTest () { ... };
    virtual ~IntComparerTest () { ... };
};

TEST_F(IntComparerTest, biggerThanZero)
{
    EXPECT_TRUE(IntComparer::inputBiggerThanZero(1));
}

TEST_F(IntComparerTest, biggerThanZero_false)
{
    EXPECT_FALSE(IntComparer::inputBiggerThanZero(-1));
}
}

请注意,包含gtest.hTEST_F宏会导致测试用例自动 (如果在测试项目中编译并链接了IntComparer.cpp )由测试框架注册(从而在运行测试可执行文件时找到/运行)-无需在任何地方包括IntComparer.cpp

也就是说,您尚未指定构建环境,也未提供有关卡住位置的任何示例代码,因此除此以外,我无法提供任何建议。