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框架扩展的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java的5个古怪问题
- 下一篇: gwt入门和进阶_GWT入门