《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、不要把测试代码和产品代码混在一起

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

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值