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 <= allowed
        where:
            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.vw
 
import org.spockframework.runtime.extension.IGlobalExtension
import org.spockframework.runtime.model.SpecInfo
 
 
class 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)}
 
    @Override
    void 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值