在平常的学习和工作中,单元测试是很重要的一环,用于验证代码中最小的可测试单元(通常是函数或方法)是否按照预期工作,单元测试可以帮助开发人员验证代码的正确性和提高代码的可维护性,确保代码的稳定性和可靠性。
官网:https://github.com/google/googletest
1.googletest
googletest是一个开源的C++测试框架,用于编写和运行单元测试。它是Google开发的一个基于xUnit风格的测试框架,旨在提供简单易用的测试工具和丰富的断言库,帮助开发者编写可靠的单元测试。
googletest具有以下特点:
- 简单易用:使用简单的宏和断言函数,可以轻松编写测试用例。
- 支持多种测试风格:支持传统的测试风格和新的测试风格,如测试夹具(TestFixture)和参数化测试(Parameterized Test)。
- 丰富的断言库:提供了丰富的断言函数,可以方便地进行测试结果的验证。
- 支持测试套件和测试用例的管理:可以将多个测试用例组织成测试套件,方便管理和执行。
- 支持测试结果的输出和报告:可以生成详细的测试结果报告,方便查看测试覆盖率和失败的测试用例。
使用googletest可以帮助开发者编写可靠的单元测试,提高代码的质量和可维护性,广泛应用于C++项目中,被认为是一个优秀的测试框架。
1.1 下载并安装googletest
$ git clone https://gitee.com/boss-dog/googletest.git
$ cd googletest
$ mkdir build
$ cd build
$ cmake -Dgtest_build_tests=on -DCMAKE_INSTALL_PREFIX=. ..
$ make -j`nproc`
$ make install
官网使用文档说明:https://google.github.io/googletest/
2.使用googletest编写测试用例
CMakeLists.txt
cmake_minimum_required(VERSION 3.16)
project(MyDemo)# 设置C++标准
set(CMAKE_CXX_STANDARD 17)# 添加googletest库
add_subdirectory(googletest)# 添加可执行文件
add_executable(test_mathtest_math.cpprobot_math.cpp
)# 链接googletest库
target_link_libraries(test_math gtest_main)
robot_math.h
#ifndef ROBOT_MATH_H
#define ROBOT_MATH_Hint add(int a, int b);int sub(int a, int b);int multiply(int a, int b);int divide(int a, int b);#endif
robot_math.cpp
#include "robot_math.h"int add(int a, int b)
{return a + b;
}int sub(int a, int b)
{return a - b;
}int multiply(int a, int b)
{return a * b;
}int divide(int a, int b)
{return a / b;
}
test_math.cpp
#include <iostream>
#include "robot_math.h"#include <gtest/gtest.h>TEST(add, test)
{auto res = add(10, 5);std::cout << "add res: " << res << std::endl;
}TEST(sub, test)
{auto res = sub(10, 5);std::cout << "sub res: " << res << std::endl;
}TEST(multiply, test)
{auto res = multiply(10, 5);std::cout << "multiply res: " << res << std::endl;
}TEST(divide, test)
{auto res = divide(10, 5);std::cout << "divide res: " << res << std::endl;
}
运行结果: