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框架

spock框架_Spock VW:编写自定义的Spock框架扩展相关推荐

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

    Spock框架具有多个内置扩展 ,这些扩展支持许多核心功能,例如@Ignore和@Timeout批注. 但更重要的是,鼓励开发人员编写自己的扩展. 例如, SpringExtension很好地将Spo ...

  2. SpringBoot和日志框架:缘由,日志框架的选择,使用,自定义配置,日志框架切换

    日志框架 缘由 如果像我们初学者,想知道代码运行到哪里了,一般都是会System.out.println() 进行输出到控制台查看代码运行的情况,好知道代码错误在哪里 但是大型的系统里面,如果有很多的 ...

  3. EFCore3.1+编写自定义的EF.Functions扩展方法

    前言 本文主要是讲解EF Core3.0+ 如何实现自定义的数据库扩展函数,虽然EF.Functions 提供了很多数据库函数,但是并不全面.比如加密解密...这样的话 我们就需要自己扩展这些数据库函 ...

  4. Robot Framework自动化测试框架核心指南-如何使用Java编写自定义的RobotFramework Lib

    如何使用Java编写自定义的RobotFramework Lib 本文包括2个章节 1. Robot Frdamwork中如何调用java Lib库 2.使用 java编写自定义的Lib 本文作者为: ...

  5. 从零开始编写自己的C#框架(16)——Web层后端父类

    从零开始编写自己的C#框架(16)--Web层后端父类 原文:从零开始编写自己的C#框架(16)--Web层后端父类 本章节讲述的各个类是后端系统的核心之一,涉及到系统安全验证.操作日志记录.页面与按 ...

  6. PHP: 手把手编写自己的 MVC 框架实例教程

    1 什么是MVC MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controller ...

  7. 从零开始编写自己的C#框架(14)——T4模板在逻辑层中的应用(三)

    原本关于T4模板原想分5个章节详细解说的,不过因为最近比较忙,也不想将整个系列时间拉得太长,所以就将它们整合在一块了,可能会有很多细节没有讲到,希望大家自己对着代码与模板去研究. 本章代码量会比较大, ...

  8. Mybatis执行流程分析_自定义简易Mybatis框架

    自定义简易Mybatis框架 Mybatis执行流程分析 Mybatis代码编写流程: Mybatis配置文件加载过程: 需求分析及技术概述 根据上述的功能结构图, 得出如下需求: 1. 需要具有配置 ...

  9. django 1.8 官方文档翻译: 6-4-2 编写自定义的django-admin命令

    编写自定义的django-admin命令 应用可以通过manage.py注册它们自己的动作.例如,你可能想为你正在发布的Django应用添加一个manage.py动作.在本页文档中,我们将为教程中的 ...

最新文章

  1. Latex使用简单总结
  2. Learn Java - Chapter 1 变量(Variables)-数组(Arrays)
  3. 光大银行分布式实战:国内最大缴费平台的数据库架构转型
  4. 手把手教你如何进行FileZilla的安装
  5. labview叠加白噪声_振荡器的相位噪声模型
  6. msdn集合不存在 请重新安装msdn_全网首发【MSDN系统】 Windows 10 1909 五版合一 原版系统(64位)...
  7. java学习(83):常用基础类object
  8. 如何修改macOS文件的默认打开方式?
  9. VS Code 快捷键设置
  10. 用于查询当前数据库中所有表格的记录条数的脚本
  11. 手把手教你安装华为网络模拟器及设备注册
  12. linux 内核 解压出错,imx258 内核解压失败(已解决)
  13. java中日期转换_java中日期格式的转换
  14. Mixlab推荐:一起开启 AI+X 微软认证未来创变者计划
  15. 复星文旅换帅:徐晓亮任董事长职务 钱建农将任复星国际执行总裁
  16. 多家机构宣布接入文心一言能力
  17. 细分领域BIM系统研发是谁的事?
  18. java scp 传文件乱码_转-linux 打开移动硬盘中的文本文件显示为乱码
  19. 数字人民币来了,它到底是什么?
  20. Python入门学习笔记

热门文章

  1. P4922-[MtOI2018]崩坏3?非酋之战!【dp】
  2. P4549-[模板]裴蜀定理
  3. P4556,jzoj3397-[GDOI2014模拟]雨天的尾巴【树链剖分,线段树】
  4. P1967,ssl2267-货车运输【树上倍增LCA,最小生成树变形kruskal】
  5. HDU5119 - Happy Matt Friends
  6. 动态规划训练18 [免费馅饼 HDU - 1176 ]
  7. mybatis3中@SelectProvider的使用技巧
  8. 解析HTTP协议六种请求方法,get,head,put,delete,post有什么区别
  9. java多线程中的死锁、活锁、饥饿、无锁都是什么鬼?
  10. 01-MyBatis入门程序