当前位置: 首页 > 工具软件 > Spock > 使用案例 >

5分钟上手Spock

邵璞
2023-12-01

spock是什么

spock 是一个适用于 java 和 groovy的测试框架。由于它灵活,简单,富有表达性的语法使得其在众多测试框架中脱颖而出。

get start

1.新建 groovy 测试目录

  • spock 单测使用groovy编写,根据约定groovy compiler默认会从test下的 groovy 文件夹下找groovy class. 
  • ide上第一次需要 右击->mark directoty as->Test Sources Root 

 

2.新建 groovy class

  • 注意是 groovy class 
  • 继承 Specification 类 
 
class MyFirstSpecification extends Specification {

//...

}

建议利用 ide 快捷创建 

 

 

3.定义一个测试方法

 
// [given]-when-then

def "testCreateShop"(){

given:

def a=1

when:

def b=createShop()

then:

a == b

true //每一行代表一个条件

}

//expect

def "testSum"(){

expect:

2 == sum(1,1)

}

4.测试多组数据(Data driven)

 
@Unroll //该注解可以根据给定的数据组数将执行结果展开,如下面给了两组abc的值,可以产生两个运行结果def "testSum"(){

given:

def a = num1 //num1,num2 此时只是占位符,在where中赋值

def b = num2

when:

def c = sum(a,b)

then:

c == a+b

where: // 可以测试多组数据

num1|num2

1 | 1

1 | 2

}

5.spring mock

  • 首先需要在测试时启动spring容器,可以直接继承 SpringTest类
 
/**

* @author tuzhenxian* @date 2021/4/1

*/

@SpringBootTest

@Rollback

class SpringTest extends Specification{

}
  • 使用@SpringBean注解 将Mock对象
 
class InboundManagerSpec extends SpringTest {

@SpringBean //将mock对象作为一个springbean

InventoryMapper inventoryMapper = Mock() //Mock的对象,方法返回值默认为null(对象)或默认值(primtive)

...

@Unroll

def "inboundSuccess:新增库存"() {

given:

// 语法说明: _ 代表任意值; >> [] 表示方法返回一个空的列表

// 下面一行代表 mock 方法 batchSelectByWarehouseAndSkuNo 任意输入情况下,返回空列表

inventoryMapper.batchSelectByWarehouseAndSkuNo(_) >> []

...

}

}

6.常用特性

 
//1.创建对象时直接赋予属性值

new Order(orderNo:"ON001",amount:1000)

//2.创建列表

[] //空列表

[new Order(orderNo:"ON001"), new Order(orderNo:"ON002")]//普通列表

def list = new ArrayList()

list<<[new Order(orderNo:"ON001")] //列表赋值

//3.map

[:]//空map

["a":1,"b":2]//map赋值

7.更多特性 请访问官网

官方example-project

官方文档

 类似资料: