一.前言
google test(以下简称gtest)是谷歌的开源C++单元测试框架,用来做c/c++的单元测试比较方便。下面对于它在linux下的使用环境搭建做简单介绍。
二.准备gtest框架
在github网站下载gtest框架
https://github.com/google/googletest
解压后的目录结构如下:
danny@danny:~/Learing/googletest/googletest-master$ ls -lh
total 56K
-rw-r--r-- 1 danny danny 5.8K Jul 1 01:33 BUILD.bazel
-rw-r--r-- 1 danny danny 927 Jul 8 19:21 CMakeLists.txt
-rw-r--r-- 1 danny danny 5.6K Jul 1 01:33 CONTRIBUTING.md
-rw-r--r-- 1 danny danny 2.2K Jul 1 01:33 CONTRIBUTORS
-rw-r--r-- 1 danny danny 1.5K Jul 1 01:33 LICENSE
-rw-r--r-- 1 danny danny 4.6K Jul 1 01:33 README.md
-rw-r--r-- 1 danny danny 1.1K Jul 1 01:33 WORKSPACE
drwxr-xr-x 2 danny danny 4.0K Jul 1 01:33 ci
drwxr-xr-x 7 danny danny 4.0K Jul 1 01:33 docs
drwxr-xr-x 8 danny danny 4.0K Jul 1 01:33 googlemock
drwxr-xr-x 9 danny danny 4.0K Jul 1 01:33 googletest
1.解压到自定义目录,为了方便,将googletest-master/CMakeList.txt中的option(BUILD_SHARED_LIBS “Build shared libraries.” OFF)中的OFF改为ON以生成动态链接库。否则默认是为静态库。
2.使用cmake编译
cd googletest-master
mkdir build
cd build
cmake ..
make
会有如下的输出:
danny@danny:~/Learing/googletest/googletest-master/build$ make
Scanning dependencies of target gtest
[ 12%] Building CXX object googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o
[ 25%] Linking CXX shared library ../lib/libgtest.so
[ 25%] Built target gtest
Scanning dependencies of target gmock
[ 37%] Building CXX object googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o
[ 50%] Linking CXX shared library ../lib/libgmock.so
[ 50%] Built target gmock
Scanning dependencies of target gmock_main
[ 62%] Building CXX object googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o
[ 75%] Linking CXX shared library ../lib/libgmock_main.so
[ 75%] Built target gmock_main
Scanning dependencies of target gtest_main
[ 87%] Building CXX object googletest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o
[100%] Linking CXX shared library ../lib/libgtest_main.so
[100%] Built target gtest_main
danny@danny:~/Learing/googletest/googletest-master/build$
共享库就可以生成了的。
3.在编译完成后,进行头文件和动态链接文件的配置,具体命令如下:
sudo mkdir /usr/lib/gtest
cd googletest-master/build/lib
sudo cp *.so /usr/lib/gtest/
cd googletest-master/googletest/include
sudo cp ./gtest /usr/include/gtest -R
sudo chmod 755 /usr/lib/gtest/*.so
sudo chmod 755 /usr/include/gtest -R
到此,Gtest就算配置完成,可以在C++程序中以动态链接库的方式使用。
三.实际案例
项目结构如下:
danny@danny:~/Learing/googletest/TestCase$ tree
.
|-- CMakeLists.txt
|-- main.cpp
|-- test
| `-- StringUtilTest.cpp
`-- utils
|-- StringUtil.cpp
|-- StringUtil.h
|-- TestUtil.cpp
`-- TestUtil.h
2 directories, 7 files
main.cpp
#include "TestUtil.h"
int main(int argc, char** argv)
{
TestUtil::runTests(argc, argv);
return 0;
}
StringUtilTest.cpp
#include "StringUtil.h"
#include <gtest/gtest.h>
#include <string>
using namespace std;
TEST(StringUtilTest, getTestString)
{
StringUtil* str = new StringUtil();
EXPECT_EQ("Hello,world!", str->getTestString());
delete str;
}
StringUtil.cpp
#include "StringUtil.h"
using namespace std;
StringUtil::StringUtil()
{
}
std::string StringUtil::getTestString()
{
return string("Hello,world!");
}
StringUtil.h
#ifndef STRINGUTIL_H
#define STRINGUTIL_H
#include <string>
class StringUtil
{
public:
StringUtil();
std::string getTestString();
};
#endif // STRINGUTIL_H
TestUtil.cpp
#include "TestUtil.h"
# include <gtest/gtest.h>
int TestUtil::runTests(int argc, char **argv)
{
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
TestUtil.h
#ifndef TESTUTIL_H
#define TESTUTIL_H
#include <string>
class TestUtil
{
public:
static int runTests(int argc, char **argv);
private:
TestUtil(){}
};
#endif // TESTUTIL_H
CMakeLists.txt
#basic setting
PROJECT(TestCpp)
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
#SET(CMAKE_BUILD_TYPE Debug)
#header files
SET(HEADER_FILES_PATH
./utils
./test
)
INCLUDE_DIRECTORIES(${HEADER_FILES_PATH})
#src files
AUX_SOURCE_DIRECTORY(. SRC_LIST)
AUX_SOURCE_DIRECTORY(./utils SRC_LIST_1)
LIST(APPEND SRC_LIST ${SRC_LIST_1})
AUX_SOURCE_DIRECTORY(./test SRC_LIST_2)
LIST(APPEND SRC_LIST ${SRC_LIST_2})
#build setting
LINK_DIRECTORIES(/usr/lib/gtest)
ADD_EXECUTABLE(${PROJECT_NAME} ${SRC_LIST})
TARGET_LINK_LIBRARIES(${PROJECT_NAME} libgtest.so)
运行
使用cmake编译运行即可看到对StringUtil的测试结果,命令如下:
cd TestCase
mkdir build
cd build
cmake ..
make .
./TestCpp
运行结果如下:
danny@danny:~/Learing/googletest/TestCase/build$ ls
CMakeCache.txt CMakeFiles Makefile TestCpp cmake_install.cmake
danny@danny:~/Learing/googletest/TestCase/build$ ./TestCpp
[==========] Running 1 test from 1 test suite.
[----------] Global test environment set-up.
[----------] 1 test from StringUtilTest
[ RUN ] StringUtilTest.getTestString
[ OK ] StringUtilTest.getTestString (0 ms)
[----------] 1 test from StringUtilTest (0 ms total)
[----------] Global test environment tear-down
[==========] 1 test from 1 test suite ran. (0 ms total)
[ PASSED ] 1 test.
测试代码见如下:
https://download.csdn.net/download/Danny_llp/20104592