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

你可能感兴趣的文章
python基础篇(2):字符串扩展知识点
查看>>
python基础篇(1):type()
查看>>
python基础篇(15):闭包
查看>>
python基础篇(14):多态
查看>>
python基础篇(12):继承
查看>>
python基础篇(11):封装
查看>>
python基础篇(10):自定义包
查看>>
python基础篇(10):类、对象与构造方法
查看>>
python系列【仅供参考】:python斗地主
查看>>
Python基础教程(第2版 修订版) pdf
查看>>
python基础实践(四)
查看>>
Python基础学习笔记(九)常用数据类型转换函数
查看>>
Python基础学习参考(五):字符串和编码
查看>>
Python基础学习
查看>>
python基础变量之---集合
查看>>
python基础变量之---字典
查看>>
python基础变量之---列表
查看>>
python基础变量之---元组
查看>>
python基础内容_Python基础入门必须了解的
查看>>
Python基础之面向对象2(封装)
查看>>