之前从来没有写测试代码的习惯,在代码调试上确实花了很多时间。最近在看《Agile Java》,逐渐了解到单元测试在软件开发过程中的重要性,觉得应该从现在开始养成写单元测试的习惯。
Java有大名鼎鼎的JUnit,而C++想必也有成熟的单元测试框架。经过一番搜索,最后我选择了Google的C++开源单元测试框架Gtest。下面记录一下Gtest的配置和简单使用,希望能够帮助到有需要的朋友。
一. 配置
1. 解压到自定义目录,为了方便,将gtest-1.7.0/CMakeListzj中下面这句的"OFF"改为“ON”以生成动态链接库。
option(BUILD_SHARED_LIBS "Build shared libraries (DLLs)." OFF)
2. 使用cmake编译,再进行库文件和include文件相关配置,具体命令如下:
unzip gtest-1.7.0.zip
cd gtest-1.7.0
mkdir build
cd build
cmake ..
sudo mkdir /usr/lib/gtest
sudo cp *.so /usr/lib/gtest/
sudo cp ../include/gtest /usr/include/gtest -R
sudo chmod 755 /usr/lib/gtest/*.so
sudo chmod 755 /usr/include/gtest -R
到此,Gtest就算配置完成,可以在C++程序中以动态链接库的方式使用。
二.使用
GTest的使用起来非常简便,下面我将用一个简单的项目来展示GTest的基本的使用方法。
项目文件构成:
TestCpp:
——CMakeLists.txt
——main.cpp
——test
————StringUtilTest.cpp
——utils
————StringUtil.cpp
————StringUtil.h
————TestUtil.cpp
————TestUtil.h
具体代码:
main.cpp
#include "TestUtil.h"
int main(int argc, char** argv)
{
TestUtil::runTests(argc, argv);
return 0;
}
#include "StringUtil.h"
#include
#include
using namespace std;
TEST(StringUtilTest, getTestString)
{
StringUtil* str = new StringUtil();
EXPECT_EQ("Hello,world!", str->getTestString());
delete str;
}
#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
class StringUtil
{
public:
StringUtil();
std::string getTestString();
};
#endif // STRINGUTIL_H
TestUtil.cpp
#include "TestUtil.h"
# include
int TestUtil::runTests(int argc, char **argv)
{
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
TestUtil.h
#ifndef TESTUTIL_H
#define TESTUTIL_H
#include
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编译运行即可,命令如下:
cd TestCpp
mkdir build
cd build
cmake ..
make .
./TestCpp
运行后可以看到对StringUtil的测试结果
这只是Gtest的最基本的用法,更多的内容请参考Gtest的官网文档: