前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spock测试框架实践(二)

Spock测试框架实践(二)

作者头像
用户5521279
发布2020-07-29 10:03:02
1.4K0
发布2020-07-29 10:03:02
举报
文章被收录于专栏:搜狗测试搜狗测试

在上一次Spock实践中我们介绍了Spock的优点和Demo的搭建,今天我们继续介绍一些Spock常用的实践。

首先介绍下spock中的几个基本概念:

1、Specification

在Spock中,待测系统(system under test; SUT) 的行为是由规格(specification) 所定义的。在使用Spock框架编写测试时,测试类需要继承自Specification类。

2、Fields

Specification类中可以定义字段,这些字段在运行每个测试方法前会被重新初始化,跟放在setup()里是一个效果。

3、Fixture Methods

预先定义的几个固定的函数,与Junit或testNG中类似。

4、Feature Mehtods

这是Spock规格(Specification)的核心,其描述了SUT应具备的各项行为。每个Specification都会包含一组相关的Feature methods,如要测试1+1是否等于2,可以编写一个函数:

5、 Blocks

每个feature method又被划分为不同的block,不同的block处于测试执行的不同阶段,在测试运行时,各个block按照不同的顺序和规则被执行,如下图:

5.1 Setup Blocks

setup也可以写成given,在这个block中会放置与这个测试函数相关的初始化程序。一般会在这个block中定义局部变量,定义mock函数等。

5.2. When and Then Blocks

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

5.2.1 断言

条件类似junit中的assert,就像上面的例子,在then或expect中会默认assert所有返回值是boolean型的顶级语句。如果要在其它地方增加断言,需要显式增加assert关键字。

如果要验证有没有跑出异常,可以使用thrown

5.2.2 断言

要获取抛出的异常对象,可以用以下语法:

如果要验证没有抛出某种异常,可以用notThrown():

5.3 Expect Blocks

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

5.4 Cleanup blocks

函数在退出前做一些清理的工作,比如关闭资源。

即使featuremethod中之前的一些执行会出现一些异常,cleanup仍然会被执行。

5.5 Where blocks

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

而在spock中,通过where block可以让这类需求实现起来变得非常优雅。

可以为标记@Unroll的方法声明动态的spec名。运行时,名称会被替换为实际的参数值。

除此之外,where block还有两种数据定义的方法,并且可以结合使用。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 搜狗测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档