《C++代码整洁之道:C++17 可持续软件开发模式实践》 —2.5.2 单元测试的命名
2.5.2 单元测试的命名
如果单元测试失败,开发人员希望立即知道以下信息:
测试单元的名称是什么?谁的单元测试失败了?
单元测试测试了什么?单元测试的环境是怎么样的(测试场景)?
预期的单元测试结果是什么?单元测试失败的实际测试结果又是什么?
因此,单元测试的命名需要具备直观性和描述性,这是非常重要的,我建议建立所有单元测试的命名标准。
首先,以这样的方式命名单元测试模块(依赖于单元测试框架,称为测试用具或测试夹具)是很好的做法,这样单元测试代码很容易衍生于单元测试框架。单元测试应该有一个像<Unit_under_Test>Test的名字,很显然,必须用测试对象的名称来替换<Unit_under_Test>占位符。例如,如果被测试的系统(SUT)是Money单位,与该测试单元对应的单元测试夹具,以及所有的单元测试用例都应该命名为MoneyTest(见图2-3)。
图2-3 被测试系统(SUT)和单元测试名称
除此之外,单元测试必须有直观的且易理解的名称,如果单元测试的名称或多或少没有意义,比如testConstructor()、test4391()或sumTest(),那么单元测试的名称不会有太大的帮助。通过下面的建议,可以为单元测试取一个好名字。
一般来说,可以在不同场景下使用多种用途的类,一个直观的且易理解的名称应该包含以下三点:
单元测试的前置条件,也就是执行单元测试之前的SUT的状态。
被单元测试测试的部分,通常是被测试的过程、函数或方法(API)的名称。
单元测试预期的测试结果。
遵循以上三点建议,测试过程或方法的单元测试命名的模板,如下所示:
下面是几小段示例代码:
代码2-1 好的且直观的单元测试命名的示例代码
另一个构建直观的且易理解的单元测试名称的方法,就是在单元测试名称中显示特定的需求。这样的单元测试的名称通常能够反应应用程序域的需求,例如,单元测试名称来自于利益相关者的需求。
下面是一些具有特定域需求的单元测试名称的示例:
代码 2-2
当你阅读上面这些单元测试的名称时,即使在没有单元测试代码的情况下,也是非常直观的且易理解的。从这些单元测试的名称中可以很容易地得到许多有用的信息。如果单元测试失败,这样的命名将会是一个很大的优势。几乎所有的单元测试框架都会把失败的单元测试的名称输出到标准输出(stdout),所以,这种直观的且易理解的单元测试命名,极大地促进了错误的定位。
- 点赞
- 收藏
- 关注作者
评论(0)