IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> 《C++代码简洁之道》学习笔记:良好的单元测试原则 -> 正文阅读

[开发测试]《C++代码简洁之道》学习笔记:良好的单元测试原则

编写单元测试代码应该遵循一些原则。?

1、单元测试的代码质量

应重视单元测试的代码质量,单元测试的代码质量和产品代码的质量同样重要。

2、单元测试的命名

单元测试类的名称命名模板:<被测试类名>Test。例如 SinglyLinkedList 类的单元测试类可以命名为:SinglyLinkedListTest

测试具体功能的函数可以有两种命名方式:

  • 使用模板:<测试前的状态>_<测试过程>_<测试预期结果>。例如:要编写一个函数测试:向一个空链表中添加一个元素,函数名称可以为:listIsEmpty_addOneElement_sizeIsOne()。
  • 在函数名称中体现特点的需求。例如:要编写一个函数测试:链表中的元素个数不能大于一个特定的值,函数名称可以为:listSizeDontNotAllowMoreThanMAX()

以下两个例子的代码,都会测试失败。

例1:

template <typename T>
int SinglyLinkedList<T>::size()
{
    int size{1};
    if(header)
    {
        linkeNode<T> * thisNode = header;
        while (thisNode)
        {
            ++size;
            if(!thisNode->next)
            {
                break;
            }
            thisNode = thisNode->next;
        }
    }
    return size;
}
#include <QtTest>
#include "singlyLinkedList.h"

class SinglyLinkedListTest : public QObject
{
    Q_OBJECT

private slots:
    void listIsEmpty_addOneElement_sizeIsOne();
};

void SinglyLinkedListTest::listIsEmpty_addOneElement_sizeIsOne()
{
    SinglyLinkedList<int> list;
    list.append(123);
    QCOMPARE(list.size(),1);
}

QTEST_APPLESS_MAIN(SinglyLinkedListTest)

#include "tst_singlylinkedlisttest.moc"

例2:

#include <QtTest>
#include "singlyLinkedList.h"

class SinglyLinkedListTest : public QObject
{
    Q_OBJECT

private slots:
    void listSizeDontNotAllowMoreThanMAX();
};

const int MAX = 3;
void SinglyLinkedListTest::listSizeDontNotAllowMoreThanMAX()
{
    SinglyLinkedList<int> list;
    list.append(123);
    list.append(234);
    list.append(345);
    list.append(456);
    QVERIFY(list.size() <= MAX);
}

QTEST_APPLESS_MAIN(SinglyLinkedListTest)

#include "tst_singlylinkedlisttest.moc"

从函数名称就能看出问题,非常直观。

3、单元测试的独立性

每个单元测试和其他单元测试应相互独立,即一个单元测试的执行不能依赖于前一个单元测试的执行结果。如果违背了这个原则那么单元测试会很难进行。

4、一个测试函数只测试一个功能(断言一次)

这个原则的意义有两个:

  • 当测试失败时能很快速地找到问题的所在。
  • 测试多个功能的函数不太好命名且让人疑惑,不禁思考这几个功能之间有什么关系?

5、不要对?getters 和 setters 进行单元测试

这种函数一般比较简单很难出错。

6、不要对第三方库做单元测试

使用时应假定第三方库没有问题。

7、不要把测试代码和产品代码混在一起

即不要再产品代码里面包含测试相关的内容。例如一个类里面包含测试这个类的某些功能的函数。

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-10-17 13:04:34  更:2022-10-17 13:04:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/17 7:45:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码