gtest,未定义引用' testing :: Test :: ~Test()',testing :: Test :: Test()

时间:2014-06-10 15:59:27

标签: c++ unit-testing googletest

我使用apt-get install libgtest-dev

安装了gtest

我试图检查这是否有效。

所以我在eclipse中制作了简单的测试代码。

但有错误,

  

对'testing :: Test :: ~Test()'的未定义引用   未定义参考   'testing :: Test :: Test()'

相反,如果我将ATest类的继承更改为受保护,则错误消失,但

发生其他错误

  

测试::测试是“ATest_AAA_Test”无法访问的基础

有什么不对?

#include <iostream>
#include <gtest/gtest.h>

class A{
public:
    int a;
    A(int a){this->a = a;}
    A(){}
    ~A(){}
    int getA(){return a;}
    void setA(int a){this->a = a;}
};

class ATest : public ::testing::Test{
public:
    virtual void SetUp(){
        a1 = A(1);
        a2 = A(2);
        a3 = A(3);
    }
    virtual void TearDwon(){}
    A a1;
    A a2;
    A a3;
};

TEST_F(ATest, AAA){
    EXPECT_EQ(1, a1.getA());
    EXPECT_EQ(2, a2.getA());
    EXPECT_EQ(3, a3.getA());
}

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

2 个答案:

答案 0 :(得分:7)

我知道这听起来很明显,但我的通灵调试技巧告诉我,当您链接最终二进制文件时,忘记在目标文件名后添加-lgtest

答案 1 :(得分:2)

安装libgtest-dev不会安装任何gtest二进制文件。 它只是在您的系统上安装googletest源包 - 标头 在/usr/include/gtest下,/usr/src/gtest下的源文件, 您可以使用cmake或GNU autotools继续构建它 如果你愿意的话。

ubuntu / debian软件频道中没有针对googletest的二进制包 (或我所知道的其他地方)。通常的做法是 download the source archive, 提取它并使用自己构建的二进制文件。 README中的undefined reference to 'testing::Test::~Test() 源包提供了有关构建和使用库的指导。

执行系统安装通常没有任何意义 正如您所做的那样,源包。

您遇到的链接错误:

libgtest

与您的代码无关:它的发生是因为您不是 链接libgtest-dev,您无法链接它,因为它未安装 {{1}}并且你没有自己构建它。

当您以某种方式更改代码时,此链接错误会消失 这会引入编译错误,因为如果编译失败 然后联系不会发生。