测试技术的一些概念

单元测试

单元测试(又称为模块测试, Unit Testing)是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。程序单元是应用的最小可测试部件。在过程化编程中,一个单元就是单个程序、函数、过程等;对于面向对象编程,最小单元就是方法,包括基类(超类)、抽象类、或者派生类(子类)中的方法。

单元测试的几种场景:

  • 开发前写单元测试,通过测试描述需求,由测试驱动开发。
  • 在开发过程中及时得到反馈,提前发现问题。
  • 应用于自动化构建或持续集成流程,对每次代码修改做回归测试。
  • 作为重构的基础,验证重构是否可靠。

Mock

BDD

BDD:行为驱动开发是一种敏捷软件开发的技术,它鼓励软件项目中的开发者、QA和非技术人员或商业参与者之间的协作。BDD最初是由Dan North在2003年命名,它包括验收测试和客户测试驱动等的极限编程的实践,作为对测试驱动开发的回应。
BDD的做法包括:

  • 确立不同利益相关者要实现的远景目标
  • 使用特性注入方法绘制出达到这些目标所需要的特性
  • 通过由外及内的软件开发方法,把涉及到的利益相关者融入到实现的过程中
  • 使用例子来描述应用程序的行为或代码的每个单元
  • 通过自动运行这些例子,提供快速反馈,进行回归测试
  • 使用“应当(should)”来描述软件的行为,以帮助阐明代码的职责,以及回答对该软件的功能性的质疑
  • 使用“确保(ensure)”来描述软件的职责,以把代码本身的效用与其他单元(element)代码带来的边际效用中区分出来。
  • 使用mock作为还未编写的相关代码模块的替身

Spock

简单地说,spock是一个测试框架,它的核心特性有以下几个:

  • 可以应用于java或groovy应用的单元测试框架。

  • 测试代码使用基于groovy语言扩展而成的规范说明语言(specification language)。

  • 通过junit runner调用测试,兼容绝大部分junit的运行场景(ide,构建工具,持续集成等)。

  • 框架的设计思路参考了JUnit,jMock,RSpec,Groovy,Scala,Vulcans……

    def setup() {} // run before every feature method
    def cleanup() {} // run after every feature method
    def setupSpec() {} // run before the first feature method
    def cleanupSpec() {} // run after the last feature method

when与then需要搭配使用,在when中执行待测试的函数,在then中判断是否符合预期

when :
stack . push ( elem )   
 then :
! stack . empty
stack . size ( ) == 1
stack . peek ( ) == elem

如果要验证有没有抛出异常,可以用thrown()

when :
stack . pop ( )   
then :
thrown ( EmptyStackException )
stack . empty

expect可以看做精简版的when+then

when :
def x = Math . max ( 1 , 2 )   
then :
x == 2

简化为

expect :
Math . max ( 1 , 2 ) == 2

Cleanup Blocks
函数退出前做一些清理工作,如关闭资源等。
Where Blocks
做测试时最复杂的事情之一就是准备测试数据,尤其是要测试边界条件、测试异常分支等,这些都需要在测试之前规划好数据。但是传统的测试框架很难轻松的制造数据,要么依赖反复调用,要么用xml或者data provider函数之类难以理解和阅读的方式。

原文地址:https://www.cnblogs.com/olenji/p/5318406.html