Spock VW:编写自定义的Spock框架扩展

Spock框架具有多个内置扩展 ,这些扩展支持许多核心功能,例如@Ignore@Timeout批注。 但更重要的是,鼓励开发人员编写自己的扩展。 例如, SpringExtension很好地将Spock与Spring框架集成在一起。 编写自定义扩展没有很好的文档记录。 在本文中,我们将编写非常简单的扩展。 它不是一个全面的指南,而只是一个有趣的展示。

介绍Spock大众扩展

在某些工程部门[1],只有在进行外部审核时,才必须通过严格的测试。 在编程中,这将是一个连续集成服务器。 Spock VW扩展可确保所有测试都在CI服务器上通过,即使它们在开发人员机器或生产环境中失败。 这个想法受到phpunit-vw的极大启发。 让我们进行一个不可能成功的简单而完整的测试:

@Unroll
class EmissionsSpec extends Specification {def 'nitrogen oxide emission (#emission) in #model must not exceed #allowed'() {expect:emission <= allowedwhere:model    | emission || allowed'Jetty'  | 1.5      || 0.022'Pascal' | 0.67     || 0.016}def 'carbon dioxide'() {expect:105 < 130}
}

对于这两个示例,第一次测试显然都失败了,但是我们可以透明地添加一个Spock扩展,以确保没有CI服务器能够解决此问题。 该扩展程序仅检查所有系统属性和环境变量,以尝试发现主机环境是否实际上是CI服务器:

package com.nurkiewicz.vwimport org.spockframework.runtime.extension.IGlobalExtension
import org.spockframework.runtime.model.SpecInfoclass VwExtension implements IGlobalExtension {private static final CONTROLLED_ENV = ['bamboo.buildKey','BUILD_ID', 'BUILD_NUMBER', 'BUILDKITE','CI', 'CIRCLECI','CONTINUOUS_INTEGRATION','GOCD_SERVER_HOST','HUDSON_URL', 'JENKINS_URL','TEAMCITY_VERSION','TRAVIS',]private static final boolean EVERYTHING_IS_FINE =CONTROLLED_ENV.any {prop ->System.getProperty(prop) || System.getenv(prop)}@Overridevoid visitSpec(SpecInfo spec) {if (EVERYTHING_IS_FINE) {spec.features*.skipped = true}}
}

VwExtension就像代码库中每个Specification一个方面。 它检查已知环境变量的列表,并且如果存在any()环境变量( EVERYTHING_IS_FINE常量),则将跳过此Spec中的所有features (测试)。 还有一件事。 不会自动发现扩展,您必须在CLASSPATH的META-INF/services目录下创建一个特殊的org.spockframework.runtime.extension.IGlobalExtension文件(当然它可以在其他JAR中)。 该文件的内容只是扩展类的完全限定名称,例如com.nurkiewicz.vw.VwExtension

就是这样,祝您测试愉快!

翻译自: https://www.javacodegeeks.com/2015/10/spock-vw-writing-custom-spock-framework-extensions.html

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

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

相关文章

物理服务器备份系统,物理备份和逻辑备份区别

物理备份和逻辑备份区别 内容精选换一换可能这份面试题还不足以包含所有Java问题&#xff0c;但有了它&#xff0c;我相信你一定不会“败”的很惨&#xff0c;有了它&#xff0c;足以应对目前市面上绝大部分的Java面试了&#xff0c;因为这些问题不论是从深度还是广度上来讲&am…

dd命令iso linux_BootISO:从 ISO 文件中创建一个可启动的 USB 设备

今天&#xff0c;我们将讨论名为 BootISO 的实用程序类似工具。它是一个简单的 bash 脚本&#xff0c;允许用户来从 ISO 文件中创建一个可启动的 USB 设备。-- Prakash Subramanian(作者)为了安装操作系统&#xff0c;我们中的大多数人(包括我)经常从 ISO 文件中创建一个可启动…

java基础-接口

转载于:https://www.cnblogs.com/ceshi2016/p/6025027.html

Python之路,day4-Python基础

1.集合2.元组 只读列表&#xff0c;只有count&#xff0c;index2个方法3.字典key-value对 1.特性 2.查询速度快&#xff0c;比列表快python中的hash在同一程序下值相同python字典中的hash只有key是hash的hash之后二分查找&#xff0c;劈半劈半注&#xff1a;只有unicode有…

gwt入门和进阶_GWT入门

gwt入门和进阶GWT是Google Web Development Kit的缩写&#xff0c;可让程序员使用Java开发Ajax Web应用程序。 GWT编译器将Java代码转换为JavaScript和html代码。 GWT应用程序称为模块&#xff0c;并且使用xml文件描述模块&#xff0c;假设该模块名称为xml文件的“ mymodule”名…

workbook加载文件路径_通过Workbook.XML 修复Excel自定义名称

小伙伴们经常想求助IT 提升打开Excel的速度&#xff0c; 标准回答是&#xff1a;重启。其实Excel 中影响打开速度的几个因素&#xff1a;1. 公式 2. 链接 3. 自定义名称 自定义名称常常被人忽视&#xff0c;里面经常隐藏着众多错误&#xff0c;而且有很多的名称是隐藏的&#x…

将IDE检查应用于自定义Java批注

J2SE 5中注释的引入改变了我们编写和处理Java的方式。 除了Java SE的预定义注释外 &#xff0c;框架&#xff0c;IDE和工具包还引入了自己的自定义注释 。 Checker框架提供了一些示例&#xff0c;说明如何使用自定义注释在Java中增加类型安全性 。 在本文中&#xff0c;我着眼于…

有什么用_app用什么软件编写

自己咋开发APP这得看你的学习程度了&#xff0c;如果你学了安卓开发那么久按照教程来吧&#xff0c;如果没有学过&#xff0c;那么就看看我的回答是不是贴题意的。比较快的开发app方式。接入任意后台&#xff0c;通过HBuilder封装成app。2.使用MUI&#xff0c;借用官方的组件代…

java函数的笔记

java函数的笔记 java中&#xff0c;函数即方法。也就是实现某个功能的办法。 函数的格式 修饰符 返回值类型 函数名(参数类型 参数) { 逻辑处理; return 处理结果; // return关键字是用于结束该函数的&#xff0c;并将处理结果返回给调用者。void类型可以省略return&#xff0…

jquery手写轮播图_15个超强的jQuery/HTML5图片轮播插件

最近我们为大家分享过不少基于jQuery的图片轮播插件&#xff0c;当然也有很多使用了HTML5和CSS3的相关技术&#xff0c;让整个图片播放器显得更加美观&#xff0c;动画效果显得更加炫酷。这次我们特意为大家筛选了一些最新的jQuery/HTML5图片轮播插件&#xff0c;每一个的功能都…

NLOG配置

<?xml version"1.0" encoding"utf-8" ?><nlog xmlns"http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"> <!-- See https://github.com/nlog/nlog/wiki/Config…

gwt格式_GWT –利弊

gwt格式我喜欢JavaScript。 随着jQuery和Mootools的出现&#xff0c;我对JavaScript的热爱倍增 。 如果有选择&#xff0c;我将对开发的任何Web应用程序使用上述任一框架。 但是进入服务行业后&#xff0c;我不得不一次次屈服于客户的压力&#xff0c;并在他们选择技术的过程中…

sap获取系统时间_获取系统当前时间

NSString *appKey(){// // 获取系统当前时间// NSDate * date [NSDate date];// NSTimeInterval sec [date timeIntervalSinceNow];// NSDate * currentDate [[NSDate alloc] initWithTimeIntervalSinceNow:sec];//// //设置时间输出格式&#xff1a;// NSDateFormatter * d…

Git 初始化版本库

创建带工作区的版本库 在开始一个新项目时&#xff0c;首先就要创建并初始化代码库。如果是在本机的工作目录中&#xff0c;那么&#xff1a; $ git init 也就够用了。如果想要初始化的版本库不在当前目录&#xff0c;需要为 git init 命令指定版本库所在的目录&#xff1a; $ …

Spring中的值注释中的占位符支持

Value批注中的${...}占位符用于访问在PropertySource注册的属性。 这对于Spring应用程序中的Configuration bean非常有用&#xff0c;但不仅如此。 为确保可行&#xff0c; PropertySourcesPlaceholderConfigurer必须存在于所有需要占位符解析的应用程序上下文中。 在此博客文…

1688学python学不会_还在害怕学不会Python嘛?这篇文章让你瞬间读懂Python入门!...

零基础学习Python能学会吗?这个问题几乎是所有初学Python的小白都会问到的问题。其实Python是非常适合初学者入门的&#xff0c;相较于其他主流类编程语言&#xff0c;Python具有更好的可读性&#xff0c;因此上手更容易&#xff0c;而且即便你是零基础也一样能学会。献给Pyth…

elisa标准曲线怎么做_ELISA标准曲线绘制

● 设置标准曲线样品的标准浓度范围要有一个比较大的跨度&#xff0c;并且要能涵盖你所要检测实验样品的浓度&#xff0c;样品的浓度要在标准曲线浓度范围之内&#xff0c;包括上限和下限。而对于呈S型的标准曲线&#xff0c;尽量要使实验样品的浓度在中间坡度最陡段&#xff0…

如果今天完成,ESB会是什么样子?

JavaOne 2015即将结束&#xff0c;这又是一次很棒的社区活动。 我和Rafael进行了两次会议和HOL 。 我最喜欢的会议之一实际上是&#xff1a;关于ESB&#xff08;如果今天完成的话&#xff09;的样子。 我以为那是过去&#xff1f; 我通常也倾向于这样说。 但是&#xff0c;系统…

线程间的通信 设置线程等待与线程唤醒

代码实现上述框图&#xff1a; 1 //等待唤醒机制2 3 /*4 wait(),notify(),notifyAll()必须用在同步中&#xff0c;因为同步中才有锁。5 指明让持有那个锁的线程去等待或被唤醒&#xff0c;例如object.wait(),表明让持有object这把锁的线程等待。6 7 wait():让线程进入等待状态&…

python sys干嘛的_Python之sys模块

Sys模块函数之多&#xff0c;我只能选取自己认为比较实用的一些函数列在此处。借马云找员工的说法,”找最合适的而不是最天才的”&#xff0c;这句话&#xff0c;我个人觉得在很多方面都能适应&#xff0c;学习也不在话下。Sys模块功能的确很多&#xff0c;但我们应该将重点放在…