gtest编写第一个测试用例出错及其解决过程

简介: 安装好gtest后,编写第一个测试案例test_main.cpp #include <iostream>#include <gtest/gtest.h>using namespace std;int Foo(int a,int b){ return a+b;}TEST(FooTest, ZeroEqual){ ASSERT_E

安装好gtest后,编写第一个测试案例test_main.cpp

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

using namespace std;

int Foo(int a,int b)
{
 return a+b;
}

TEST(FooTest, ZeroEqual)
{
 ASSERT_EQ(0,0);
}

TEST(FooTest, HandleNoneZeroInput)
{
    EXPECT_EQ(12,Foo(4, 10));
    EXPECT_EQ(6, Foo(30, 18));
}


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


按照gtest的介绍MakeFile文件为

TARGET=test_main

all:
    gtest-config --min-version=1.0 || echo "Insufficient Google Test version."
    g++  $(gtest-config --cppflags --cxxflags) -o $(TARGET).o -c test_main.cpp
    g++  $(gtest-config --ldflags --libs) -o $(TARGET) $(TARGET).o
clean:
    rm -rf *.o $(TARGET)


但是编译的时候,出现错误

cxy-/home/chenxueyou/gtest$ make
gtest-config --min-version=1.0 || echo "Insufficient Google Test version."
g++   -o test_main.o -c test_main.cpp
g++  -o test_main test_main.o
test_main.o: In function `FooTest_ZeroEqual_Test::TestBody()':
test_main.cpp:(.text+0x9e): undefined reference to `testing::internal::AssertHelper::AssertHelper(testing::TestPartResult::Type, char const*, int, char const*)'
...


省略了部分错误信息,看到了undefined reference,编译通过,但是链接失败,可以猜测是没有找到对应的库。再仔细看实际执行时打印的命令为

   g++  -o test_main.o -c test_main.cpp
    g++  -o test_main test_main.o


很显然,没有引入gtest的头文件,也没有加载gtest对应的库。
执行命令
>echo $(gtest-config --cppflags --cxxflags)

echo $(gtest-config --ldflags --libs)
可以得到gtest配置的头文件路径和库文件路径。

cxy-/home/chenxueyou/gtest$ echo $(gtest-config --cppflags --cxxflags)
-I/usr/include -pthread
cxy-/home/chenxueyou/gtest$ echo $(gtest-config --ldflags --libs)
-L/usr/lib64 -lgtest -pthread


而在我们的Makefile中执行时上面两个命令的结果为空。所以修改Makefile,手动指定头文件路径和库文件路径,Makefile为

TARGET=test_main

all:
    gtest-config --min-version=1.0 || echo "Insufficient Google Test version."
    g++  -I/usr/include -pthread -o $(TARGET).o -c test_main.cpp
    g++ -L/usr/lib64 -lgtest -pthread -o $(TARGET) $(TARGET).o
clean:
    rm -rf *.o $(TARGET)


这样,我们的第一个gtest测试文件就能编译通过了。

总结

1.Makefile实际执行的命令可能与预想的命令不一样,要仔细查看。
2.gtest通过头文件和库的方式引入工程,要指定其头文件和库文件的位置
3.gtest-config命令能够帮助我们找到对应的路径


欢迎光临我的网站----蝴蝶忽然的博客园----人既无名的专栏。 
如果阅读本文过程中有任何问题,请联系作者,转载请注明出处!

相关文章
|
7月前
|
测试技术 程序员 C++
C++单元测试GoogleTest和GoogleMock十分钟快速上手(gtest&gmock)
gtest是Google开源的一个跨平台的(Liunx、Mac OS X、Windows等)的 C++ 单元测试框架,可以帮助程序员测试 C++ 程序的结果预期。它提供了丰富的断言、致命和非致命判断、参数化、”死亡测试”等等。另一方面,gmock并不是一个独立的测试框架,而是gtest的辅助框架,主要用于模拟没有实现的类的操作,以便在没有完整类的情况下进行测试。通过配合使用gtest和gmock,开发者可以编写出更为复杂且健壮的C++单元测试。
551 0
|
Rust 测试技术 编译器
还在用gtest?更好用的测试框架介绍
还在用gtest?更好用的测试框架介绍
下一篇
无影云桌面