开发者测试进阶

——网易云课堂《开发者测试》课程笔记

这节,我给大家介绍大名鼎鼎的xUnit系列和我们的测试平台慕测。

xUnit几乎成为今天最为著名的面向开发者的测试框架,它是开源的自动化测试框架。最初它是面向Smalltalk及Sunit。我们知道,Smalltalk是一个非常著名的面向对象编程语言。Sunit是1998年由Kent Beck所开发。我们知道,Kent Beck是极限编程的创始人。所以这一点在整个xUnit系列得到非常重要的体现,帮助软件开发人员提高编码效率及质量。

而今天我们在所有的xUnit系列当中,最著名的可能是Junit。Junit是由Kent Beck和Erich Gamma共同联手开发。而Erich Gamma是设计模式的开创者之一,也是Eclipse的总设计师。所以由他们联手,开发一个非常流行非常好用的Junit,也是我们这门课的重点。
devt1
xUnit系列当中的框架有非常多,但他们几乎都遵循相同的架构,包括以下内容。
devt2
• Test runner,负责把代码和测试组装起来进行运行获得结果。
• Test case,测试用例,是指一些测试脚本,包括输入、断言等等各种处理,以进行对代码的测试。
• Test suite,测试套件是把这些测试用例组装起来,进行更加高效的有效的测试。
• Test fixture,主要是指测试的上下文及包括环境的一些封装,得到一个有效的测试结果。
• Test execution,测试执行是指控制整个测试用例执行的细节,模拟预期以完成测试任务。
• Test result formatter,是对测试结果的收集。
• Assertions,是对测试结果的分析和判断等等。
互联网上有非常丰富的xUnit的资源,有些是独立的xUnit系列网站,比如junit.org是Junit的一个资源网站。

Junit是一个非常强大的单元测试框架,但我们前面已经强调过关于单元测试的定义是可以扩展的。

Junit是有两个大名鼎鼎的人物创造的,也是所有xUnit系列当中最为成功的一个,我们这门课几乎所有的白盒测试都依赖于Junit来完成。

这节我们介绍Junit的进阶使用,我们主要包括以下内容,第一,断言,第二,参数化,第三,测试套件,第四,执行时限。

断言就是我们传统意义上的测试预言,预期输出。我们知道一个完整的测试用例通常至少包括测试数据和测试预言。也会包括一些测试环境信息我们共同封装成可用的一个测试脚本。而断言就是用来判断它的结果对还是不对的一个重要手段。

devt3

Junit提供丰富的断言机制,我们在assert后面进行各种变化。

devt4

常见的有判断:assertTrue/assertFalse,也就是判断这个条件是True or False。

同时,他提供.fail方法来进行失败的一些分析。我们还有一些等式的判断等等都在断言里面提供,对应同时提供一些对象的判别。

devt5

参数化,几乎是在所有的自动化测试中最为普遍的一个功能。今天他几乎在所有的自动化测试框架中都给以实现,我们通过一系列标注来实现自动化测试的参数化。

devt6

所谓参数化,是指我们在运行测试的脚本实现相同动作的同时要冠以不同的一个输入数据,那么这时候,我们把数据的测试和代码分离出来。以实现更好的扩展性。

测试套件是为了更有效的组织测试用例的一种方式,比如我们把不同的测试类组装起来同时运行。实现相同或者不同的一些测试目的。

执行时限也是我们在测试里面非常常见的一个功能。以防止在程序运行或者测试执行的时候过长,进入死循环等等。

我们进一步来讲解开发者测试所需要考虑的内容。主要包括,异常和Mock的处理。
devt7

异常是现代编程语言为了提高代码质量和健壮性而提供的一种机制,来处理在代码正常范围以内的意外。通常这一部分也需要测试。传统测试很难对异常部分的message进行判断。所以在Junit里面提供一个类似try/catch的机制来分析里面详细的一些状态信息。

devt8
devt9

而Mock是为了屏蔽外调的一个常用手段,也几乎在所有的自动化测试里面都提供类似的机制。

“开发者测试进阶”的一个回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注