Testing GoogleTest测试在单独的库中声明

Testing GoogleTest测试在单独的库中声明,testing,compilation,googletest,Testing,Compilation,Googletest,我有很多使用GoogleTest框架自动生成的测试。 当前,每个测试都位于一个.cpp文件中,该文件包含在一个较大的“Tests.cpp”文件中,然后该文件将包含在主文件中。 当我试图编译所有这些文件时,我的电脑死机了。 我认为这是因为它试图在单个输出文件中编译它们。 是否有一种方法可以以“正常”的方式编写每个测试夹具,为每个测试夹具/案例创建一个输出文件,然后链接它们 谢谢很不清楚你在做什么。通常在C++中不应该包含CPP文件。我们需要您从编译器获得的输出 一种常见的方法是为一个测试夹具和相关

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


谢谢

很不清楚你在做什么。通常在C++中不应该包含CPP文件。我们需要您从编译器获得的输出

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

GoGeLestEt不过是一个具有繁重和复杂宏的C++库。通常使用C++编程的规则。

< P>使用GoGeLestEt的“正常”方式是将测试置于一个单独的项目中,从您希望测试的项目中,即,如果您希望测试项目“强> 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));
}
}
单独测试应如下所示:

#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.h
TEST\u F
宏会导致测试用例自动(如果
IntComparer.cpp
在测试项目中被编译和链接)由测试框架注册(并在运行测试可执行文件时找到/运行)-无需在任何地方包含
IntComparer.cpp


这就是说,您没有指定构建环境,也没有提供任何关于您所处位置的示例代码,因此我不能给您任何超出此范围的建议。

“是否有一种方法可以以“正常”的方式编写每个测试装置,为每个测试装置/案例创建一个输出文件,然后链接它们?”当然,这只是正常的方式。您还没有完全清楚阻止您的内容。请考虑添加代码示例和有关生成环境的详细信息…我们大多数人还没有掌握通过互联网阅读随机陌生人的想法以帮助他们的能力:/我的意思是,如果我没有在主文件中声明每个测试用例的部分,它就不会出现在测试列表中。如果声明所有测试用例的.cpp文件不包括在主文件中,而只是添加到主库中,那么测试不会出现。这实际上不是一个hpp/cpp问题,更多的是如何确保每个测试用例在单独的目标文件中编译时都被添加到列表中。对不起,现在还不清楚。如果需要帮助,必须显示项目的结构。Google测试框架提供了三个主要的宏:test、test_F和test_P。当使用test或test_F时,除了调用::testing::InitGoogleTest(&argc,argv)之外,你不应该做任何事情;int r=运行所有测试();这应该足以执行每个测试。如果您使用参数化测试,那么您还必须通过实例化_test_CASE_P macro.OK来注册它们,因此我有main.cpp,在其中调用InitGoogleTest并运行_ALL_test()。抱歉,从上一个文件继续:在另一个文件中,假设为了.hpp,我有TestFixture定义,.cpp,我有使用test_F的实现和每个测试用例。如果我只在库中包含(我使用的是jamfile构建系统)与main.cpp在同一个库中的.cpp文件,当我运行--gtest_list_测试时,我找不到它。如果我要包括cpp,那么它就会出现。也许是因为建造系统。