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

在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'

八大兵 完成。

而已

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

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

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

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

相关文章

PHP ERROR_PHP 处理错误函数

错误级别Fatal Error:致命错误(脚本终止运行)E_ERROR //致命的运行错误,错误无法恢复,暂停执行脚本E_CORE_ERROR //PHP启动时初始化过程中的致命错误E_COMPILE_ERROR //编译时致命性错,就像由Zend脚本引擎生成了一个E_ERRORE_USER_ERROR //自…

php接收文件,如何通过php 发送与接收流文件

php 发送与接收流文件sendStreamFile.php 把文件以流的形式发送receiveStreamFile.php 接收流文件并保存到本地sendStreamFile.php<?php /** php 发送流文件* param String $url 接收的路径* param String $file 要发送的文件* return boolean*/function sendStreamFile($u…

elasticsearch和php,快速开始 | Elasticsearch-PHP | Elastic

快速开始edit这一节会概述一下客户端以及客户端的一些主要方法的使用规则。在 composer.json 文件中引入 elasticsearch-php&#xff1a;{"require": {"elasticsearch/elasticsearch": "~6.0"}}用 composer 安装客户端&#xff1a;curl -s http:…

spring aop组件_安全性中的Spring AOP –通过方面控制UI组件的创建

spring aop组件以下文章将显示在我参与的一个项目中&#xff0c;我们如何使用Spring的AOP来介绍一些与安全性相关的功能。 这样的概念是&#xff0c;为了使用户能够看到某些UI组件&#xff0c;他需要具有一定级别的安全特权。 如果不满足该要求&#xff0c;则不会显示UICompone…

使用Spring Boot构建RESTFul服务

每个人都在谈论微服务&#xff0c;例如WSO2微服务框架 &#xff0c; Spring Boot等。由于我已经很长时间没有从事任何与Spring相关的项目了&#xff0c;所以我想到了使用Spring Boot实现一个简单的RESTFul服务。 因此&#xff0c;我从Spring文档开始。 这很简单。 您可以使用“…

php分页操作,PHP实现适用于文件内容操作的分页类

本文实例为大家分享了PHP实现文件内容操作的分页类&#xff0c;强调一下只针对文件的操作&#xff0c;供大家参考&#xff0c;具体内容如下class StrPage {private $current; //当前页private $file; //操作文件private $totalPage; //总的页数private $url; //传递的参数priva…

php imagemagick 文档,调用ImageMagick的PHP函数中文文档

bool imagick_writeimage([source image handle],[new name & filetype]) 写图片 UN KNOW USE imagick_writeimages new_handle imagick_clonehandle([image handle]) 复制出新句柄 image_handle imagick_image2blob([blob handle]) 将数据流数据转换成为image数据 ima…

java.util接口_Java 8中java.util.function包中的谓词和使用者接口

java.util接口在上一篇文章中&#xff0c;我写了关于Function接口的内容 &#xff0c;它是java.util.package的一部分。 我还提到了Predicate接口&#xff0c;它是同一包的一部分&#xff0c;在这篇文章中&#xff0c;我将向您展示如何使用Predicate和Consumer接口。 让我们看一…

php datetime 对象,PHP DateTime 对象和 Date 函数的 Demo

DateTime对象//设置时间时区date_default_timezone_set("PRC");$dateFormat "Y-m-d";$dateTimeFormat "Y-m-d H:i:s";//获取当前时间$date new DateTime();echo $date->format($dateTimeFormat) . "\n";//时间2015-01-01加上7年…

将Swagger与Spring Boot REST API集成

在上一篇文章中&#xff0c;我谈到了我使用Spring Boot创建RESTFul Services的经验。 在创建REST API时&#xff0c;正确的文档是其中的必需部分。 昂首阔步是什么&#xff1f; Swagger &#xff08;Swagger 2&#xff09;是用于描述和记录REST API的规范。 它指定了REST Web…

php滴滴平台接口,图片服务API文档

简介滴滴云图片服务API提供标准的轻量级无状态HTTP接口&#xff0c;支持用户对数据的全方位管理。接口概览API描述图片信息获取文件的基本信息&#xff0c;包括长度、宽度、文件大小、格式。图片旋转将图片按顺时针旋转。图片模糊对图片进行模糊操作。图片缩放将图片缩小或者放…

drools。drools_Drools Planner重命名为OptaPlanner:宣布www.optaplanner.org

drools。drools我们很自豪地宣布&#xff0c;从版本6.0.0.Beta1开始&#xff0c;将Drools Planner重命名为OptaPlanner。 我们也很高兴推出其新网站&#xff1a; www.optaplanner.org。 OptaPlanner优化了业务资源的使用。 每个组织都面临计划方面的问题&#xff1a;以有限的有…

php gridview,PHP编程:yii2-GridView在开发中常用的功能及技巧总结

《PHP编程&#xff1a;yii2-GridView在开发中常用的功能及技巧总结》要点&#xff1a;本文介绍了PHP编程&#xff1a;yii2-GridView在开发中常用的功能及技巧总结&#xff0c;希望对您有用。如果有疑问&#xff0c;可以联系我们。相关主题&#xff1a;YII框架数据网格或者说 Gr…

Spring Boot – spring.config.name –案例研究

当必须在不同配置中使用相同的应用程序代码时&#xff0c;外部化Spring Boot应用程序属性会很有用。 如果spring.config.location配置远离源代码&#xff08;无论如何spring.config.location被认为是最佳实践&#xff09;&#xff0c; spring.config.location环境属性可以用于指…

java遇上html,JAVA遇见HTML——JSP篇:JSP内置对象(上)

JSP九大内置对象JSP内置对象是Web容器创建的一组对象&#xff0c;不使用new关键就可以使用的内置对象。int[] value{60,70,80};for(int i:value){out.println(i);}%>Web程序的请求响应模式用户发送请求(request)服务器给用户响应(response)out对象&#xff1a;out对象是JspW…

java中接口文件创建_功能接口简介–在Java 8中重新创建的概念

java中接口文件创建世界各地的所有Java开发人员都将至少使用以下接口之一&#xff1a;java.lang.Runnable&#xff0c;java.awt.event.ActionListener&#xff0c;java.util.Comparator&#xff0c;java.util.concurrent.Callable。 声明的接口之间有一些共同的特征&#xff0c…

java手动注册filter,SpringBoot如何注册Servlet、Filter、Listener的几种方式

在Servlet 3.0之前都是使用web.xml文件进行配置&#xff0c;需要增加Servlet、Filter或者Listener都需要在web.xml增加相应的配置。Servlet 3.0之后可以使用注解进行配置Servlet、Filter或者Listener&#xff1b;springboot也提供了使用代码进行注册Servlet、Filter或者Listene…

Java命令行界面(第12部分):CLAJR

第十二篇有关在Java中处理命令行参数的文章的特色库是带有Java Reflection的命令行参数 &#xff08;CLAJR&#xff09;。 该“库”是单个Java源文件&#xff08; CLAJR-0.9.java &#xff09;&#xff0c; 可从SourceForge下载 。 CLAJR的主页当前显示2006年版权日期&#xff…

php xml相关函数方法,php中对xml读取的相关函数的介绍一

对象 XML解析函数 描述元素 xml_set_element_handler() 元素的开始和结束字符数据 xml_set_character_data_handler() 字符数据的开始外部实体 xml_set_external_entity_ref_handler() 外部实体出现未解析外部实体 xml_set_unparsed_entity_decl_handler() 未解析的外部实体出现…

java调用oracle的函数,从Java调用Oracle函数

我有以下功能规格&#xff1a;FUNCTION FUNC_GET_SOMETHING_FROM_DATABASE ( IN_parameter1 IN VARCHAR2,IN_parameter2 IN VARCHAR2,IN_parameter3 IN VARCHAR2,IN_parameter4 IN VARCHAR2,IN_parameter5 IN VARCHAR2,IN_parameter6 IN VARCHAR2)RETURN REFCURTYP;以下是我在J…