首先感谢
http://blog.csdn.net/startarsyx/article/details/38305687
博主的文章,解决了关键性问题——链接后仍然提示未定义的引用这个玄学问题~
照例废话
前辈们总结了很多如何安装并使用Google Test的经验,但一般都是参照官方给的Instruction来进行操作的,不是特别灵活。
无意中发现了一种新的方法,可以在任何目录下编写简单的makefile即可实现测试~
简单的说就是将googletest框架编译成 .a 文件,放到系统lib目录下,每次使用链接到工程里,操作异常简单
下面进入正文
下载google test本体
喜闻乐见的gayhub,不多说了
编译并安装
下载并解压之后,进入对应目录,输入以下命令:
cmake CMakeLists.txt
make
sudo make install
这样就完成了对GoogleTest的安装。
原理就是,先使用CMake生成makefile,然后就是很常规的make编译,make install安装了(因为需要拷贝到usr/local/lib下,需要管理员权限)。
例子编写
main.cpp
#include "main.h"
bool TestFun(int a = 0)
{
return a > 10 ? true : false;
}
main.h
#pragma once
bool TestFun(int );
UnitTest-1.cpp
#include "gtest/gtest.h"
#include "main.h"
namespace
{
TEST(FunTest, BelowTen)
{
EXPECT_TRUE(TestFun(11));
EXPECT_TRUE(TestFun(12));
EXPECT_TRUE(TestFun(13));
EXPECT_TRUE(TestFun(14));
EXPECT_TRUE(TestFun(15));
}
TEST(FunTest, AboveTen)
{
EXPECT_FALSE(TestFun(0));
EXPECT_FALSE(TestFun(1));
EXPECT_FALSE(TestFun(2));
EXPECT_FALSE(TestFun(3));
EXPECT_FALSE(TestFun(4));
}
TEST(FunTest, MixNumbers)
{
EXPECT_FALSE(TestFun(6));
EXPECT_FALSE(TestFun(7));
EXPECT_FALSE(TestFun(9));
EXPECT_TRUE(TestFun(22));
EXPECT_TRUE(TestFun(345));
EXPECT_TRUE(TestFun(21312));
}
}
很简单的例子,能看到我这篇文章的各位我相信都已经看了不少其他前辈写的文章了,我就不多说了。
我觉得最关键的可能就是这个极度精简makefile了。
Google Test 极度精简的makefile
all: UnitTest-1
main.o : main.cpp main.h
$(CXX) -c main.cpp
UnitTest-1.o : UnitTest-1.cpp main.h
$(CXX) -c UnitTest-1.cpp
UnitTest-1 : main.o UnitTest-1.o
$(CXX) -pthread -lgtest_main -lgtest $^ -o $@
最关键的就一行,省略了很多变量,可以让不太熟悉makefile的同志直观的看出google test框架最少需要的是什么。
(如果你有主函数,那么请去掉gtest_main)
还有,gtest_main 一定要在gtest之前,否则会出现链接错误(找不到xxxxx)