博客
关于我
单元测试中的 AAA 规则
阅读量:779 次
发布时间:2019-03-24

本文共 1515 字,大约阅读时间需要 5 分钟。

在单元测试中,代码通常分为三部分:设置初始条件的代码、执行业务逻辑的代码、以及验证执行结果是否正确的断言代码。为了让这些代码更具可读性,我们常使用AAA规则来编写单元测试。

AAA规则即 Arrange、Act、Assert。比如,如果有一个函数是用来反转输入字符串的,我们可以按照AAA规则来编写测试代码。

首先,在Arrange部分,我们初始化输入条件。例如:

string s1 = "abc";string s2 = "xyz";

接下来,在Act部分,我们调用目标函数并进行操作。例如:

var r1 = MyStringFunctions.Reverse(s1);var r2 = MyStringFunctions.Reverse(s2);

最后,在Assert部分,我们验证结果是否正确。例如:

Assert.AreEqual("cba", r1);Assert.AreEqual("zyx", r2);

如果我们需要测试多个输入条件下的结果是否不变,我们可以将所有的输入条件和断言放在同一部分。例如:

Arrange    string s1 = "abc";    string s2 = "xyz";Act    var r1 = MyStringFunctions.Reverse(s1);    var r2 = MyStringFunctions.Reverse(s2);Assert    Assert.AreEqual("cba", r1);    Assert.AreEqual("zyx", r2);

这样一来,我们的测试代码就能体现出结果的顺序不影响测试结果,符合FIRST原则中的repeated可重复性原则。

相比之下,以下方案显然更符合repeatable原则:

Arrange    string s1 = "abc";    string s2 = "xyz";Act    var r1 = MyStringFunctions.Reverse(s1);    var r2 = MyStringFunctions.Reverse(s2);    var r3 = MyStringFunctions.Reverse(s2);    var r4 = MyStringFunctions.Reverse(s2);Assert    Assert.AreEqual("cba", r1);    Assert.AreEqual("zyx", r2);    Assert.AreEqual("zyx", r3);    Assert.AreEqual("cba", r4);

这样我们可以清楚地看到r1和r2的结果,以及额外的r3和r4结果,证明了结果的顺序不影响测试结果。

预防代码混乱的另一种做法是将所有输入条件和操作放在同一部分,同时将断言也放在同一部分。例如:

Arrange    string s1 = "abc";    string s2 = "xyz";Act    var r1 = MyStringFunctions.Reverse(s1);    var r2 = MyStringFunctions.Reverse(s2);Assert    Assert.AreEqual("cba", r1);    Assert.AreEqual("zyx", r2);

通过这种方式,代码结构更加清晰,结果的下单序也不受限制。

总的来说,AAA规则可以帮助我们编写清晰简洁的单元测试代码,改善代码的可读性。通过合理地安排输入条件和断言,使我们的测试案例更具可重复性。

转载地址:http://rlokk.baihongyu.com/

你可能感兴趣的文章
nodejs 运行CMD命令
查看>>
nodejs-mime类型
查看>>
nodejs中Express 路由统一设置缓存的小技巧
查看>>
NodeJs单元测试之 API性能测试
查看>>
nodejs图片转换字节保存
查看>>
NodeJs学习笔记001--npm换源
查看>>
Nodejs教程09:实现一个带接口请求的简单服务器
查看>>
Nodejs简介以及Windows上安装Nodejs
查看>>
nodejs系列之express
查看>>
nodejs配置express服务器,运行自动打开浏览器
查看>>
Node入门之创建第一个HelloNode
查看>>
Node出错导致运行崩溃的解决方案
查看>>
node安装及配置之windows版
查看>>
Node提示:error code Z_BUF_ERROR,error error -5,error zlib:unexpected end of file
查看>>
NOIp2005 过河
查看>>
NOPI读取Excel
查看>>
NoSQL&MongoDB
查看>>
NotImplementedError: Cannot copy out of meta tensor; no data! Please use torch.nn.Module.to_empty()
查看>>
npm error MSB3428: 未能加载 Visual C++ 组件“VCBuild.exe”。要解决此问题,1) 安装
查看>>
npm install digital envelope routines::unsupported解决方法
查看>>