在最近1年的测试工作中,一直在用SpockFramework (简称Spock) 测试框架,它是基于Groovy语言来编写测试脚本,可以被集成到Spring中。 如果使用Spock测试框架最好去了解下Groovy,另外建议采用Gradle作为构建工具,gradle自带的测试报告挺不错的,样式简单明了又美观。
现在说说Spock的具体应用:
1,Specification
在Spock中,由Specification定义待测系统的行为, 所有的Spock测试类都需要继承Specification,某种意义上你可以认为它是Spock测试框架的测试基类。
2,常用的方法(看着很眼熟)
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
3,Spock特有的特性(或语法)
每个feature method又被划分为不同的block,不同的block处于测试执行的不同阶段,在测试运行时,各个block按照不同的顺序和规则被执行,如下图:
4,Spock Blocks使用
a) setup ,cleanup很明显分别是测试前预处理和测试后清理
b)when ,then 需要搭配使用,有些类似Sql语句中的case ... when ... then
c) expect 此模块可以单独使用,它的语句块可以有多行,但每行必须是boolean表达式
expect:
1==1 && "a"=="a"
d) where 个人觉得where语句是spock最吸引人的地方,它能让测试脚本变得优雅简介不重复。
请看例子:
在测试中,一个方法或接口,我们要考虑不同的输入情况,而处理逻辑是一样的,如果用Junit需要写好几个测试方法,而Spock只需要1个。上例中求两个数中最大值,我们只需要将所有的测试用例放在where:语句块中就完事了。
PS:如果有@Unroll注解,在执行case时,上面的例子算3个测试case,
没有该注解则算1个case
where:语句块还有另外一种写法:接受一个集合list作为输入参数
结束语:Spcok测试框架在数据驱动模式中能极大的提高测试脚本开发效率,如果对Spock测试框架有兴趣,去Git上下载 spock-example 里面demo很详细。