groovy语言单元测试(spock)

2023-11-12

一、spock-groovy单元测试的五种情况


/**
 * 单元测试
 * given: mock单测中指定mock数据,模拟入参
 * when: 触发行为,比如调用指定方法或函数
 * then: 做出断言表达式
 * expect: 期望的行为,when-then的精简版
 * @since 2022-07-13
 */
@CodeBootTest
class Test extends Specification {
    @Autowired
    private TestService testService

    // 对于Impl私有的方法,无法通过Service调用的,需要单独new一个,并设置其属性
    def testServiceImpl = new TestServiceImpl();

    def lovAdapter = Mock(LovAdapter)

    // 运行前的启动方法
    void setup() {
        testServiceImpl.lovAdapter = lovAdapter
    }

    // 情况一:expect


    def "test-1"(){
        given:
        PageRequest pageRequest = new PageRequest(0, 10)
        QueryDto queryDto = new QueryDto()
        queryDto.setTenantId(0L)
        expect:
        testService.selectList(pageRequest, queryDto).getContent().size() == 3
    }

    // 情况二:when-then


    def "test-2"(){
        given:
        when:
        Header result = testService.detail(33L, 0L)
        then:
        result.recNo == "20220707100001"
        result.recHeaderId == 33L
    }

    // 情况三:thrown(Exception)


    def "test-3"(){
        given:
        List<Header> list = new ArrayList<Header>();
        Header vo = new Header();
        vo.setRecHeaderId(33L)
        vo.setRecNo("20220707100001")
        vo.setRecStatus("2")
        list.add(vo)
        when:
        testService.checkSuccess(list)
        then:
        thrown(IllegalArgumentException)
    }

    // 情况四:noExceptionThrown,mock模拟入参


    def "test-4" () {
        given:
        Header vo = new Header();
        vo.setTenantId(0L)
        vo.setRecHeaderId(33L)
        vo.setRecNo("20220707100001")
        vo.setRecStatus("2")
        vo.setIsIncludeTax("Y")
        def list = Arrays.asList(vo)
        //构造值集查询出参
        lovAdapter.queryLovValue("YES_NO", vo.tenantId) >> Arrays.asList(new LovValueDTO(value: "Y", meaning: "是"))
        when:
        testServiceImpl.processData(list, vo.tenantId, null, null)
        then:
        noExceptionThrown()
    }

    // 情况五:expect,and-with验证结果


    def "test-5" () {
        given:
        expect:
        Header result = testService.detail(33L, 0L)
        // 对于数据转换无返回值的,可以比较数据处理前后的值
        and: "验证结果是否正确"
        with(result) {
            (result.recNo == "20220707100001")
            (result.recHeaderId == 33L)
        }
    }


    // 情况六:where 表格方式验证用户信息的合法性


    def "test-6"() {
        expect:
        Math.max(a,b) == result

        // 这样一个单元测试会验证两组数据
        // 第一组 a = 1 , b = 2, result = 2
        // 第二组 a = 3 , b = 0, result = 3
        where:
        a    |b    |result
        1    |2    |2
        3    |0    |3
    }
}

二、配置文件及SQL注意点


1.application-test.yml在mybatisplus下面加上


liquibase:
    change-log: classpath:db/changelog/db.mysql-master.xml


2.db.mysql-master.xml里加上对应单元测试脚本路径

3.mapper文件注意点:要用单引号,不能用双引号


4.测试脚本注意点


创建库(CREATE SCHEMA IF NOT EXISTS TEST;)
若需要设置库(SET SCHEMA TEST;)
建表语句(库名.表名,普通索引删除,COLLATE utf8_unicode_ci 以及CHARACTER SET utf8mb4 COLLATE utf8mb4_bin 这种删除,表编码设置ENGINE=InnoDB DEFAULT CHARSET=utf8 ;)

5.单元测试启动就是整个类启动,不支持单个方法启动

三、spock单元测试jar包


官网:http://spockframework.org/

<!--H2-->
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>1.4.199</version>
    <scope>test</scope>
</dependency>

<!--spock-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-to-slf4j</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.spockframework</groupId>
    <artifactId>spock-core</artifactId>
    <scope>test</scope></dependency>
<dependency>
    <groupId>org.spockframework</groupId>
    <artifactId>spock-spring</artifactId>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>cglib</groupId>
    <artifactId>cglib-nodep</artifactId>
    <version>3.1</version>
    <scope>test</scope>
</dependency>
        
<!--liquibase -->
<dependency>
    <groupId>org.liquibase</groupId>
    <artifactId>liquibase-core</artifactId>
    <scope>test</scope>
</dependency>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

groovy语言单元测试(spock) 的相关文章

随机推荐

  • cocos自定义类 绑定到lua

    1 按照 frameworks cocos2d x tools tolua下的README mdown的指示一步一步做下去 务必要和文件中描述的一样 我已经被这个坑爹的东西坑的很惨了 检查这个有没有配置好的方法是 运行下那个genbindi
  • 循环依赖 三级缓存解决

    循环依赖的产生 A对象里面依赖着B对象 B对象依赖着A对象 流程 当A开始实例化A 然后初始化A 再初始化的A的时候 去实例化B 然后再初始化B 初始化B的时候在去实例化A 产生一个循环依赖 spring设置三级缓存来解决这个问题 Obje
  • 校招面试重点汇总之多线程(不多但都是高频面试题)

    一 进程和线程有什么区别 进程和线程都是操作系统中用来实现多任务的概念 但是它们之间有一些重要的区别 如下所述 1 定义方面 进程 进程是操作系统中分配资源的基本单位 是正在运行中的一个程序 一个进程可以包含多个线程 每个进程有自己独立的地
  • vscode检测到#include错误,请更新includePath。解决方法

    vscode检测到 include错误 请更新includePath 解决方法 最近电脑重做 重新安装了一边vscode 但是写代码的时候发现头文件会标错 显示无法找到 下面是我的解决办法 Linux 子系统 执行命令查看g 包含路径 g
  • Android Studio开发环境搭建及本地Gradle设置方法

    Android Studio开发环境搭建及本地Gradle设置方法 在进行Android应用程序开发时 Android Studio是一款非常强大的集成开发环境 IDE 它提供了丰富的工具和功能 帮助开发者轻松创建 测试和调试Android
  • java token生成规则_token的生成原理 使用方法!

    什么是token Token是服务端生成的一串字符串 以作客户端进行请求的一个令牌 当第一次登录后 服务器生成一个Token便将此Token返回给客户端 以后客户端只需带上这个Token前来请求数据即可 无需再次带上用户名和密码 基于 To
  • [解决办法]已经安装了数字证书,但是谷歌浏览器登录https协议的web系统时仍然提示证书不受信任...

    已经安装了数字证书 但是谷歌浏览器登录https协议的web系统时仍然提示证书不受信任 如下图 解决办法 1 单击Chrome浏览器右侧设置菜单 选择 设置 2 拖至页面下方 单击 显示高级设置 3 单击高级设置中的 HTTPS SSL 处
  • IDEA 热部署项目

    使用Idea 开发SpringBoot项目 修改完代码以后 要重新启动 Application 才可以看到效果 这样做开发效率肯定是大受影响的 可以通过热部署 热更新来实时加载更改 提高效率 1 引入热部署插件
  • 电脑蓝屏终止代码irql_一分钟教你看懂蓝屏代码,轻松解决电脑蓝屏问题

    电脑突然蓝屏的情况 想必很多朋友都遇到过吧 不知道你们是怎么解决的呢 重装系统 还是找专业人员维修呢 其实只要够看懂蓝屏代码 就能 对症下药 有些问题自己就能解决 今天小源就分享一些常见的蓝屏代码给大家 下面我们一起来看看吧 一 0X000
  • Python中的字典索引

    Python中的符合数据类型 字符串 列表和序列 它们用整数作为索引 如果你试图用其他的类型做索引 就会产生错误 gt gt gt list 1 2 3 gt gt gt list 0 1 gt gt gt list one Traceba
  • 【Linux】序列化和反序列化

    文章目录 定义 利用 Json 实现序列化反序列化 Json 的认识 Jsoncpp 库的下载与认识 实现序列化 实现反序列化 在网络编程中 直接使用 结构体 进行数据传输会出错 因为本质上socket无法传输结构体 我们只有将结构体装换为
  • 接口测试用例怎么写?一文1600字教你写一个优秀的接口测试的测试用例

    一 用例设计1 1 接口测试概念 接口测试 测试系统间接口的一种测试 测试的对象主要是接口 主要是测试外部系统与所测系统之间以及内部系统之间的交互点 2 接口测试方法 a 可以通过开发脚本代码进行测试 b 可以通过开源免费的接口调用调试工具
  • 虚拟文件系统 (VFS)-基于linux3.10

    引言 虚拟文件系统 VFS VirtualFileSystem 介于具体的文件系统和C库之间 其用提供一个统一的方法来操作文件 目录以及其它对象 其能够很好的抽象具体的文件系统 在linux上具体的文件系统主要分为三类 l 基于非易失性的存
  • 【CV with Pytorch】第 4 章 :构建图像分割模型

    我们周围的图像有不同的纹理 图案 形状和大小 它们携带着大量的信息 这些信息很容易被人眼和大脑理解 但计算机却不太容易理解 图像分割是一个问题集 我们试图训练计算机理解图像 以便它们可以分离不同的对象并将相似的对象分组 这可以是类似像素强度
  • 在远程服务器上执行本地的shell脚本

    1 使用ssh实现 ssh user hostname C bin bash lt test sh 2 使用expect实现 采用的策略就是先在本地通过expect把shell脚本推送到远程服务器上 之后再用expect模拟登录之后 先给远
  • Join中on条件是null的问题讨论

    MySQL dbs gt select from test1 id stu id stu age 1 1 25 2 1 NULL 2 rows in set 0 00 sec MySQL dbs gt select from test2 i
  • 【Vue + Koa 前后端分离项目实战9】使用开源框架==>快速搭建后台管理系统 -- part9 项目总结

    去读书 去学一门手艺 去做任何自己喜欢的事 永远不会晚 才不会辜负这份人生 本博客教学视频来源于imoom 0到1快速构建自己的后台管理系统 课程 官方演示地址 https talelin com 目录 一 项目介绍 1 技术准备 2 学到
  • doris tips

    1 schema表格式字段长度 如果是数字 字母这种的长度等于hive sql里面 length variable 的长度 如果是中文要占3 4个Char 2 表增加分区 可以通过脚本自己构造多个sql 语句 类似 ALTER TABLE
  • 【C语言】rand()函数(如何生成指定范围随机数)

    一 rand 函数简介 我们先来看一下cplusplus com The C Resources Network网站上rand函数的基本信息 系统生成随机数时需要使用rand函数 rand 会返回一个范围在0到RAND MAX 32767
  • groovy语言单元测试(spock)

    一 spock groovy单元测试的五种情况 单元测试 given mock单测中指定mock数据 模拟入参 when 触发行为 比如调用指定方法或函数 then 做出断言表达式 expect 期望的行为 when then的精简版 si