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
Spock VW:编写自定义的Spock框架扩展相关推荐
- spock框架_Spock VW:编写自定义的Spock框架扩展
spock框架 Spock框架具有多个内置扩展 ,这些扩展支持许多核心功能,例如@Ignore和@Timeout批注. 但更重要的是,鼓励开发人员编写自己的扩展. 例如, SpringExtensio ...
- EFCore3.1+编写自定义的EF.Functions扩展方法
前言 本文主要是讲解EF Core3.0+ 如何实现自定义的数据库扩展函数,虽然EF.Functions 提供了很多数据库函数,但是并不全面.比如加密解密...这样的话 我们就需要自己扩展这些数据库函 ...
- Robot Framework自动化测试框架核心指南-如何使用Java编写自定义的RobotFramework Lib
如何使用Java编写自定义的RobotFramework Lib 本文包括2个章节 1. Robot Frdamwork中如何调用java Lib库 2.使用 java编写自定义的Lib 本文作者为: ...
- PHP: 手把手编写自己的 MVC 框架实例教程
1 什么是MVC MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controller ...
- django 1.8 官方文档翻译: 6-4-2 编写自定义的django-admin命令
编写自定义的django-admin命令 应用可以通过manage.py注册它们自己的动作.例如,你可能想为你正在发布的Django应用添加一个manage.py动作.在本页文档中,我们将为教程中的 ...
- 如何在ASP.NET Core中编写自定义日志记录提供程序
目录 介绍 如何实现所需的接口 基础类和附件 FileLoggerProvider具体类及其附件 1. ConfigureLogging() 2. appsettings.json文件 介绍 源代码可 ...
- 从零开始编写自己的C#框架(8)——后台管理系统功能设计
还是老规矩先吐下槽,在规范的开发过程中,这个时候应该是编写总体设计(概要设计)的时候,不过对于中小型项目来说,过于规范的遵守软件工程,编写太多文档也会拉长进度,一般会将它与详细设计合并到一起来处理,所 ...
- 在VSCode中自定义文件类型和扩展名关联
目录 标题 概述 实现步骤 总结 标题 在 VSCode 中自定义文件类型和扩展名关联 Customize file type and extension associations in VSCode ...
- CodeGen编写自定义表达式标记
CodeGen编写自定义表达式标记 CodeGen支持开发人员通过编写plug-in modules插件模块来定义自定义表达式标记的能力,以提供与这些标记相关联的逻辑.这种plug-in module ...
最新文章
- FFmpeg简介及在vc2010下编译步骤
- 聊一聊Java 泛型通配符 T,E,K,V,?
- Service Mesh — APIGW vs ServiceMesh
- 羡慕女设计师啊,天生色感好!
- c语言删除结构体数组的数据库,结构体数组的删除问题
- 51nod 1402 最大值 3级算法题 排序后修改限制点 时间复杂度O(m^2)
- 欢迎使用Augury[翻译]
- 新版Microsoft Edge支持跨平台跨设备浏览
- Dapr微服务应用开发系列4:状态管理构件块
- 开课吧9.9元学python靠谱吗-开课吧的Python课程怎么样?大概是多少钱?讲师是廖雪峰吗?...
- css中的.clearfix是什么意思?
- Redis.conf 详解
- 《数学建模与数学实验》第1章学习笔记
- c语言乘法除法结合律,C语言运算符的优先级和结合律
- UBI文件系统的制作与挂载案例
- [历史]读大卫的《犹太人历史》
- Linux:查看主机显卡
- 基于JAVA学生用品采购系统计算机毕业设计源码+系统+数据库+lw文档+部署
- [文摘20080131]89个管理定律及点评
- ESP32 报错is installed, but the tool failed to run