首先感謝
博主的文章,解決了關鍵性問題——鏈接後仍然提示未定義的引用這個玄學問題~
照例廢話
前輩們總結了很多如何安裝並使用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)