码迷,mamicode.com
首页 > 编程语言 > 详细

Google Test(gtest)写c++单元测试

时间:2019-03-02 23:57:14      阅读:470      评论:0      收藏:0      [点我收藏+]

标签:ota   测试用例   imu   cpp   hat   sqrt   框架   github   ubunt   

Google Test(gtest)是谷歌开源的用于c++单元测试的框架,其github主页:https://github.com/google/googletest

单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。比如我们可以对程序中的一个文件、函数或一个类进行单元测试。下面以ubuntu为例进行简单的学习使用,此外windows和mac下也可以使用gtest。

1 安装gtest

sudo apt-get install libgtest-dev # 安装源文件
sudo apt-get install cmake
cd /usr/src/gtest
sudo cmake CMakeLists.txt # 使用CMake编译
sudo make
sudo cp *.a /usr/lib # 安装(复制)库文件到一般常用的库目录

2 使用gtest

创建一个示例项目,其中sqrt_test.cpp是测试文件,其中包含main函数。sqrt.h和sqrt.cpp就是我们要测试的自己写的程序,在这里作为测试文件的库文件,需要链接到可执行文件。

.
├── build
├── CMakeLists.txt
├── sqrt.cpp
├── sqrt.h
└── sqrt_test.cpp

下面是具体这四个文件的内容。库文件不用解释了,就是一个求平方根的函数。

// sqrt.h
#ifndef SQRT_H
#define SQRT_H
#include <cmath>

double squareRoot(const double a);

#endif
// sqrt.cpp
#include "sqrt.h"
 
// Get the Square root of a number. 
double squareRoot(const double a) 
{
    double b = sqrt(a);
    if(b != b) // NaN check
        { return -1.0; }
    else
        { return sqrt(a); }
}

单元测试的测试用例要覆盖常用的输入组合、边界条件和异常,这里只进行常用和异常情况下两个测试。ASSERT_EQ很简单,即表明函数的返回值必须等于给定的值,更多的语法可以参考Google Test primer等官方文档。

// sqrt_test.cpp
#include "sqrt.h"
#include <gtest/gtest.h>

TEST(SquareRootTest, PositiveNos) // normal cases
{ 
    ASSERT_EQ(6, squareRoot(36.0));
    ASSERT_EQ(18.0, squareRoot(324.0));
    ASSERT_EQ(25.4, squareRoot(645.16));
    ASSERT_EQ(0, squareRoot(0.0));
}

TEST(SquareRootTest, NegativeNos) // extreme cases
{
    ASSERT_EQ(-1.0, squareRoot(-15.0));
    ASSERT_EQ(-1.0, squareRoot(-0.2));
}

int main(int argc, char **argv) 
{
    testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}

然后就是简单的CMake用法了,查找GTest库,然后进行链接等。

cmake_minimum_required(VERSION 3.1)
 
# Locate GTest
find_package(GTest REQUIRED)
include_directories(${GTEST_INCLUDE_DIRS})
 
# Link runTests with what we want to test and the GTest and pthread library
add_executable(myTest sqrt_test.cpp)
add_library(sqrt sqrt.cpp)
target_link_libraries(myTest ${GTEST_LIBRARIES} sqrt pthread)

然后运行测试程序也很简单

cd build
cmake ..
make
./myTest

输出应该是这个样子的:

[==========] Running 2 tests from 1 test case.
[----------] Global test environment set-up.
[----------] 2 tests from SquareRootTest
[ RUN      ] SquareRootTest.PositiveNos
[       OK ] SquareRootTest.PositiveNos (0 ms)
[ RUN      ] SquareRootTest.NegativeNos
[       OK ] SquareRootTest.NegativeNos (0 ms)
[----------] 2 tests from SquareRootTest (0 ms total)

[----------] Global test environment tear-down
[==========] 2 tests from 1 test case ran. (0 ms total)
[  PASSED  ] 2 tests.

可以看到两个测试都显示OK,因此最终状态显示PASSED!

本文参考:https://www.srcmake.com/home/google-cpp-test-framework

个人理解错误的地方还请不吝赐教,转载请标明出处

Google Test(gtest)写c++单元测试

标签:ota   测试用例   imu   cpp   hat   sqrt   框架   github   ubunt   

原文地址:https://www.cnblogs.com/GJGJH/p/10463549.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!