博客
关于我
单元测试中的 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/

你可能感兴趣的文章
Python3 tutorial day3
查看>>
python3 week4
查看>>
Python3 创建数组
查看>>
python3 套接字异常(a byte-like object is required not str)
查看>>
python3 实现用户三次输入错误记录黑名单并对该用户登录锁定-day1
查看>>
python3 文本变图片
查看>>
Python3 查看 com 组件的属性
查看>>
python3 案例分享--发邮件
查看>>
python3 模板库_Python3 标准库概览_Python教程_我爱模板网 - 提供下载各种免费建站资源,免费网站模板,免费网页特效,让你爱上建站!...
查看>>
Python3 求最大/小值及索引值 Numpy
查看>>
python3+django使用celery执行某些任务失败的解决方案
查看>>
Python3+Requests+Unittest实战系列【一】
查看>>
python3+requests+unittest实战系列【一】
查看>>
python3+requests+unittest实战系列【二】
查看>>
Python3+Requests+Unittest实战系列【二】
查看>>
python3----ASCII
查看>>
Python3-selenium自动化测试框架,结合HTMLTestRunner测试报告!
查看>>
Python3-如何自我更新作为服务运行的应用程序
查看>>
Python3.1-网格模拟概念性问题
查看>>
Python3.12 解决conda环境libstdc++版本过低问题
查看>>