spock 集成测试_使用Spock Mocks进行Grails 3.3集成测试

spock 集成测试

在Grails单元测试中,可以轻松使用Grails随附的Spock框架来模拟或存根协作者(例如服务)。

“ 测试”一章对模拟协作者, doWithSpring / doWithConfig回调方法,在测试中模拟bean的FreshRuntime批注进行了一些解释,但是它们主要用于单元测试

在集成测试中模拟bean怎么样?

如果我们有控制器怎么办

class AnimalRegistrationController {AnimalRegistrationService animalRegistrationServicedef arrival(ArrivalCommand arrival) {animalRegistrationService.registerArrival(arrival).map { ArrivalErrorMessage aem ->renderErrors(aem)}.orElse {render status: 200}}
}

哪个调用了服务,哪个调用了存储库–这可能会执行您不想在集成测试中发生的外部调用。

class AnimalRegistrationService {ArrivalRepository arrivalRepositoryOptional registerArrival(Arrival arrival) {arrivalRepository.registerArrival(arrival)}}

以前,我曾写过Grails 3.3具有Spock 1.1的特性 ,它为我们提供了一些新功能,例如java.util.Optional的默认答案…但它给了我们更多的好处!

1. DetachedMockFactory和TestConfiguration

现在,我们还有一个DetachedMockFactory ,可用于在Specification外部(例如在Spring配置中)外部的层次结构之外声明模拟。

我被触发这篇文章中关于Spring集成测试,我把它调整到工作的Grails 3.3 -这是基于 Spring的引导,但并没有完全使用所有我们在香草 Spring应用程序中使用了Spring的注解。

因此,我们使用DetachedMockFactorysrc/test/groovy创建了一个专门用于测试的配置,例如

import spock.mock.DetachedMockFactory
import org.springframework.boot.test.context.TestConfiguration
import org.springframework.context.annotation.Bean
...@TestConfiguration
class TestRepositoryConfig {private DetachedMockFactory factory = new DetachedMockFactory()@BeanArrivalRepository arrivalRepository() {factory.Mock(ArrivalRepository)}
}

2.整合测试

现在,通过使用@Autowired 按类型注入模拟的bean,可以在Grails 3集成测试中使用模拟的bean。 我们可以照常创造期望。

@Integration
class ArrivalApiIntegrationSpec extends Specification {@Value('${local.server.port}')Integer serverPort@AutowiredArrivalRepository mockedArrivalRepositoryvoid "should create an arrival"() {given:1 * mockedArrivalRepository.registerArrival(_) >> {Optional.empty()}when:def response = new RestBuilder().post('http://localhost:{serverPort}/api/arrivals') {urlVariables([serverPort: serverPort])json {animalId = 1date = '2017-01-01'}} then:response.status == 200}
}

3.依赖

为了使上述方法起作用,您实际上必须引入一个基本的spock-lang依赖关系。

将其添加到您的build.gradle

dependencies {...testCompile 'org.spockframework:spock-core:1.1-groovy-2.4'testCompile 'org.spockframework:spock-spring:1.1-groovy-2.4'

八大兵 完成。

而已

现在,我们已经完全控制了模拟豆,就好像我们在进行单元测试一样。

翻译自: https://www.javacodegeeks.com/2017/07/grails-3-3-integration-testing-spock-mocks.html

spock 集成测试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/334826.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uni开发中可以用table标签么_「uni-app 组件」t-table 表格

table 表格基本使用组件,让你制作简单表格只需要专注内容,而不用过度专注样式。此组件基本全平台支持。(支付宝,百度,头条小程序理论上都支持,但是没有很细致的测试这几个平台)功能亮点自定义全局表格样式自定义局部表…

Linux 命令之 kill -- 杀死进程

文章目录命令介绍语法格式常用选项参考示例(一)列出所有信号的名称(二)杀掉 bash 进程命令介绍 kill 正如这个单词的意思一样,就是杀死。linux 系统中 kill 命令用来删除执行中的程序或工作。 kill 命令用来删除执行…

gwt-2.8.2下载_从GWT开发人员的角度概述Scala.js

gwt-2.8.2下载该博客严重偏向于GWT(和基于GWT的框架),但是我谨记,将来GWT可能会被其他技术取代,因此我们始终愿意探索其他平台/框架。 正如他们所说,多元化可以降低风险。 每种编程语言,即使是最…

Linux 命令之 killall 命令-使用进程的名称来杀死一组进程

文章目录介绍语法格式常用选项参数参考示例介绍 killall 命令使用进程的名称来杀死进程,使用此指令可以杀死一组同名进程。我们可以使用kill命令杀死指定进程 PID 的进程,如果要找到我们需要杀死的进程,我们还需要在之前使用 ps 等命令再配合…

python selenium 点击开始按钮_使用Selenium和Python单击一个按钮

I have the following code:Expand allWhen I click on expand all, the whole page loads. How can I do it using WebDriver for Python?解决方案As per the HTML you can use the find_element_by_link_text and invoke click() method as follows :driver.find_element_by…

COLLATE oracle,Sql 中Collate用法

今天查询sqlite的时候需要不区分大小写,查了下文档,需要使用collate nocase.顺便学习下collate的用法。collate在sql中是用来定义排序规则的。排序规则其实就是当比较两个字符串时,根据某种规则来确定哪个比较大,是否相等。各个数…

Linux 命令之 nslookup 命令-查询域名 DNS 信息的工具

文章目录介绍常用选项参考示例介绍 nslookup命令的英文全称为 “query Internet name server interactively ”。nslookup命令主要用来查询域名的DNS信息。在使用nslookup之前,先确保已经安装了它,nslookup属于bind-utils包下一个命令 。 nslookup有两…

jdeps_JDeps入门–分析项目的依赖关系

jdepsJDeps是Java依赖关系分析工具 ,这是一个命令行工具,它处理Java字节码(意味着.class文件或包含它们的JAR),并分析类之间静态声明的依赖关系。 可以用各种方式过滤结果,并可以将其汇总到包或JAR级别。 J…

extjs5的grid垂直滚动条bug_ExtJS 6.2.1 Classic Grid 滚动条bug解决方案

如果列表同时存在横向滚动条和竖向滚动条,当竖向滚动条滚动到底部时点击横向滚动条,滚动条会自动滚动到顶部此bug未在其他版本发现,参考高版本代码重写类解决此bug,直接上代码:/*** 如果列表同时存在横向滚动条和竖向滚…

禁止linux使用密码ssh,linux centos7服务器使用密钥登录ssh同时禁止root密码登录

这两天在大量的给服务器添加密钥,有的服务器简单绑定下就行了。但是京东云目前就毕竟弱了,得自己手动来。目前京东云的服务器需要自己手动修改配置,才能用密钥登录服务器,不然默认还是root用密码登录。把密钥保存到本地&#xff0…

cloudwatch_将CloudWatch Logs与Cloudhub Mule集成

cloudwatch在此博客中,我将解释如何为您的Mule CloudHub应用程序启用AWS Cloudwatch日志 。 AWS提供了Cloudwatch Logs Services,以便您可以更好地管理日志。 它比松散便宜。 由于cloudhub会自动翻转超过100 MB的日志,因此我们需要一种机制来…

linux 权限 mask,【自学Linux】Linux用户、组、权限(一)

用户、组、权限权限:r,w,x文件:r:可读,可以使用类似cat等命令查看文件内容w:可写,可以编辑或删除此文件x:可执行,eXacutable,可以命令提示符下当中命令提交给内核运行0 000 ---:无权限1 001 --x&#xff1a…

要多大内存才满足_什么是延迟满足能力?“延迟满足”能力对孩子有多重要家长要清楚...

文丨饭饭妈记得去年过春节的时候,家里来了两个亲戚,他们分别有一个小孩,当时大家都在准备年夜饭。其中一份糯米团子准备好放在桌子上之后,亲戚家的两个小孩都非常想要吃,亲戚对孩子说:“你们现在不能吃&…

Linux 命令之 cd 命令-切换目录

文章目录介绍语法格式常用选项参考示例介绍 cd 命令是 change directory 中单词的首字母缩写,其英文释义是改变目录,所以该命令的功能是从当前目录切换到指定目录。 其中目录的路径可分为绝对路径和相对路径。若目录名称省略,则切换至使用者…

Linux 命令之 pgrep -- 用于检索(搜索进程/查找进程)当前正在运行的进程

文章目录命令介绍常用选项参考示例示例 1,查看所有名称为 httpd 的进程示例 2,查看进程号最小的,名称为 httpd 的进程示例 3,查看进程号最大的,名称为 httpd 的进程命令介绍 pgrep 的意思是"进程号全局正则匹配输…

java端到端_Java应用程序性能监控:复杂分布式应用程序的端到端性能

java端到端通过从您的应用程序学习企业APM产品,发现更快,更有效的性能监控。 参加AppDynamics APM导览! 在最复杂和分布式环境中端到端监视Java应用程序性能-专注于业务事务。 自动发现的业务交易,动态基准,代码级诊断…

Linux内核链表访问链表头指针,linux内核——链表结构分析

http://blog.csdn.net/tigerjibo/article/details/8299584简单整理(使用linux3.0内核)这里首先学习的是内核中一种抽象定义的双向链表,为了提高其扩展性。内核中链表的描述数据结构位置:Types.h (linux-3.0.12\include\linux) 5444 2011/11/2922…

遗传算法求二元函数极值怎么编码_用遗传算法求复杂函数的极值点

确定遗传在元素个体,遗传得到的个体和变异个体中选取最好的30个个体(对应的函数值最大的30个个体)作为下一次迭代的父样本。from random import randintfrom numpy import sindef decode(g):return [((g&0xfff) - 2048) * 0.001, ((g>>12) - 2048) * 0.00…

Linux 命令之 ulimit 命令-控制shell程序的资源

文章目录介绍常用选项参考示例介绍 用来限制系统用户对 shell 资源的访问。如果不懂什么意思,下面一段内容可以帮助你理解: 假设有这样一种情况,当一台 Linux 主机上同时登陆了 10 个人,在系统资源无限制的情况下,这…

java jvm虚拟机_Java虚拟机(JVM)简介

java jvm虚拟机什么是JVM Java虚拟机(JVM)是使计算机能够运行Java程序的抽象计算机。 JVM有三个概念: 1.规格 2.实施 3.实例。 该规范是正式描述JVM实现要求的文档。 具有单一规范可确保所有实现都可互操作。 JVM实现是满足JVM规范要求的…