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

之前从来没有写测试代码的习惯,在代码调试上确实花了很多时间。最近在看《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;
}

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编译运行即可,命令如下:

cd TestCpp
mkdir build
cd build
cmake ..
make .
./TestCpp
运行后可以看到对StringUtil的测试结果

这只是Gtest的最基本的用法,更多的内容请参考Gtest的官网文档:





  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenBMC 是一个开放源代码的项目,旨在为基于开放标准的硬件平台提供管理功能。为了确保其稳定性和正确性,OpenBMC 项目采用了单元测试来验证代码的各个组件。以下是关于 OpenBMC 单元测试的一些常见问题和答案: 1. OpenBMC 如何进行单元测试? OpenBMC 使用 Google 的 C++ 单元测试框架 GTest 来进行单元测试。开发人员编写测试用例,使用 GTest 框架进行断言和验证,以确保代码的正确性。 2. 单元测试覆盖了哪些组件? OpenBMC 的单元测试覆盖了各个组件,包括但不限于底层硬件访问、传感器管理、日志记录、网络功能等。 3. 单元测试是否自动运行? 是的,OpenBMC 的单元测试自动运行的。在提交代码之前,开发人员会运行单元测试套件,以确保新的更改没有破坏现有的功能。 4. 如何运行 OpenBMC 的单元测试运行 OpenBMC 的单元测试需要在开发环境中设置好相关依赖项和配置。通常,开发者可以使用构建系统(如 Yocto)生成可执行文件,并使用相应的命令行参数运行测试套件。 5. 单元测试结果如何报告和跟踪? OpenBMC 使用开源的测试报告工具(如 Jenkins)来报告和跟踪单元测试结果。开发者可以在构建系统中配置相关插件,以生成详细的测试报告和统计信息。 请注意,以上信息基于对 OpenBMC 项目的了解,实际情况可能会有所不同。建议参考 OpenBMC 官方文档和代码库以获取更准确的信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值