当前位置: 首页 > article >正文

GoogleTest做单元测试

目录

  • 环境准备
  • GoogleTest

环境准备

git clone https://github.com/google/googletest.git

说cmkae版本过低了,解决方法

进到googletest中

cmake CMakeLists.txt
make
sudo make install

在这里插入图片描述


ls /usr/local/lib

存在以下文件说明安装成功

在这里插入图片描述
中间出了个问题就是,总是出现链接不成功,导致库导入不进去
在这里插入图片描述
可以对G++命令加上-L编译的命令,这样就指定了库的搜索路径。

g++ sample1.cc sample1_unittest.cc -o sample1 -L/usr/local/lib -lgtest -lgtest_main -lpthread

在这里插入图片描述

在这里插入图片描述

GoogleTest

单元测试是用来对一个模块、一个函数或者一个类来进行正确性检测的测试工作。
比如我们测试一个岛问题的解决方法

#include <iostream>
#include <initializer_list>
#include <vector>
#include <gtest/gtest.h>

using namespace std;

class IslandProblem {
public:
    using Matrix = vector<vector<char>>;
    IslandProblem(const initializer_list<vector<char>> list) {
        _islands.assign(list);
    }

    int Do() {
        int num = 0;
        for (int row = 0; row < (int)_islands.size(); row++) {
            for (int col = 0; col < (int)_islands[row].size(); col++) {
                if (canUnion(row, col)) {
                    num++;
                    unionIsland(row, col);
                }
            }
        }
        return num;
    }

protected:
    bool canUnion(int row, int col) {
        if (row < 0 || row >= (int)_islands.size())
            return false;
        if (col < 0 || col >= (int)_islands[row].size())
            return false;
        if (_islands[row][col] != 1)
            return false;
        return true;
    }
    void unionIsland(int row, int col) {
        _islands[row][col] = 2;
        // up
        if (canUnion(row-1, col)) unionIsland(row-1, col);
        // left
        if (canUnion(row, col-1)) unionIsland(row, col-1);
        // down
        if (canUnion(row+1, col)) unionIsland(row+1, col);
        // right
        if (canUnion(row, col+1)) unionIsland(row, col+1);
    }

private:
    Matrix _islands;
};

TEST(IslandProblem, logic) {
    IslandProblem ip1{
        {1,1,1,1},
        {1,0,1,1},
        {0,0,0,0},
        {1,0,1,0}
    };
    EXPECT_EQ(ip1.Do(), 3);

    IslandProblem ip2{
        {1,0,1,1},
        {1,0,1,1},
        {0,0,0,0},
        {1,0,1,0}
    };
    EXPECT_EQ(ip2.Do(), 4);
}

TEST(IslandProblem, boundary) {
    IslandProblem ip1{
        {1,1,1,1},
        {1,0,0,1},
        {1,0,0,1},
        {1,1,1,1}
    };
    EXPECT_EQ(ip1.Do(), 1);
    IslandProblem ip2{
    };
    EXPECT_EQ(ip2.Do(), 0);
}

TEST(IslandProblem, exception) {
    IslandProblem ip1{
        {-1,1,1,1},
        {1,0,0,1},
        {1,0,0,1},
        {1,1,1,1}
    };
    EXPECT_EQ(ip1.Do(), 1);
}

解决方法要考虑:逻辑问题(功能正确),边界问题,异常情况。TEST的测试案例中已经把这些问题考虑进去了。
然后实际去测试,说明解决方法能够考虑以上三种情况在这里插入图片描述


http://www.kler.cn/a/412153.html

相关文章:

  • idea_卸载与安装
  • 【Java】二叉树:数据海洋中灯塔式结构探秘(上)
  • ubuntu中使用ffmpeg和nginx推流rtmp视频
  • 数据库的联合查询
  • 虚拟局域网PPTP配置与验证(二)
  • 《线性代数的本质》
  • [小白系列]Ubuntu安装教程-安装NodeJS
  • k8s认证、授权
  • C#基础56-60
  • unity使用笔记
  • Python 数据结构对比:列表与数组的选择指南
  • 研0找实习【学nlp】15---我的后续,总结(暂时性完结)
  • 11.26 深度学习-激活函数
  • MFC图形函数学习11——路径层函数
  • springcloud中bootstrap.yml配置文件
  • 北京航空航天大学多模态自适应攀岩机器人:突破复杂地形挑战
  • 【C++ 算法进阶】算法提升二十三
  • maven <scope>import</scope>配置作用
  • Flink学习连载文章4-flink中的各种转换操作
  • CSDN 博客自动发布脚本(Python 含自动登录、定时发布)
  • 【Android+多线程】异步 多线程 知识总结:基础概念 / 多种方式 / 实现方法 / 源码分析
  • 大模型的token是什么;常见大模型的token是多少
  • Android Framework SurfaceFlinger面试题及参考答案
  • Linux从基础到进阶
  • 【python】摄像头调用马赛克恶搞
  • 【Linux系列】NTP时间同步服务器搭建完整指南