c++单元测试框架Gtest的简单配置与使用

之前从来没有写测试代码的习惯,在代码调试上确实花了很多时间。最近在看《Agile Java》,逐渐了解到单元测试在软件开发过程中的重要性,觉得应该从现在开始养成写单元测试的习惯。

Java有大名鼎鼎的JUnit,而C++想必也有成熟的单元测试框架。经过一番搜索,最后我选择了Google的C++开源单元测试框架Gtest。下面记录一下Gtest的配置和简单使用,希望能够帮助到有需要的朋友。

  • 环境:Ubuntu 14.04
  • GTest 官方下载地址:http://code.google.com/p/googletest/downloads/list
  • 本文选择的版本是1.7.0,地址:http://googletest.googlecode.com/files/gtest-1.7.0.zip
  • 备用下载地址:http://yun.baidu.com/s/1dDGxpiL

一. 配置

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;
}

StringUtilTest.cpp

#include "StringUtil.h"
#include 
#include 

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 

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的官网文档:

  • http://code.google.com/p/googletest/





你可能感兴趣的:(c++单元测试框架Gtest的简单配置与使用)