点击右上方,关注开源中国OSC头条号,获取最新技术资讯
参与翻译 (2人) : xiaoaiwhc1, LaingKe
我们经常为我们的业务代码写测试用例,对吧?毫无疑问,大多数答案会落在“不错,但是你知道怎样避免它么?”和“当然,我喜欢测试”之间的某种状态。这里我将介绍一些小窍门,让你明白写好测试用例也是如此简单。这也将帮助你写更少的碎片化的测试,以确保你的应用更加强壮。
同时,如果你的答案是“不,我从来不写测试”,那我也希望这些简单有效的技术让你看到写测试用例的好处,你也将会看到写出明确无价的测试集并不像你想的那样困难。
如何写测试用例和什么是管理测试套件的最好实践,如今是一个新的主题。
我们过去已经讨论了很多主题。从如何在编译流程中正确地使用集成测试,到如何在单元测试中模拟测试环境,再到代码覆盖率和如何找出实际需要测试的代码等。
今天,我想给你一些新的思路,教你如何从低级到高级构建测试蓝图,组织测试的心理画像。从如何构造一个简单的单元测试用例,到更高层级的工具的应用等。比如: 你会明白模拟(mock)、侦测(spy)和复制粘贴测试代码(copy-pasting 这里估计是指代码复用)等。让我们开始吧!
AAArrr, 听起来就像是海盗,对吧~~~
在大量的软件开发中,找到合适的设计模式来采用会是一个好的开端。你是否想通过工厂创建对象?亦或者是否需要把你的web应用分为模型,视图和控制器等模块?在这背后经常会有一种模式帮助你实现你的想法。那么,一个典型的测试模式应该看起来是什么样的呢?
在写测试代码时,一个最有效,也最简单的模式是“准备(Arrange)---动作(Act)---断言(Assert)”模型,也叫做 AAA.
这个模型的前提是:所有的测试应该遵循这个默认布局。被测系统的所有预置条件和输入应该在测试一开始就安排好。等所有前置条件确定后,我们就可以针对被测系统执行动作(Act)了, 比如执行一个方法或检查一些系统状态。最后,我们还需要对被测系统产生的结果进行检查(Assert)。
让我们看一个Java JUnit中使用该模式的测试用例:
@Test public void testAddition() { // Arrange Calculator calculator = new Calculator(); // Act int result = calculator.add(1, 2); // Assert assertEquals("Calculator.add returns invalid result