spock测试_将Spock 1.3测试迁移到Spock 2.0
spock測試
了解Spock 2.0 M1(基于JUnit 5)的期望,如何在Gradle和Maven中遷移到它以及為什么報告發(fā)現(xiàn)的問題很重要:)。
重要說明 。 我絕對不建議您永久將您的現(xiàn)實項目遷移到Spock 2.0 M1! 這是2.x的第一個(預(yù))發(fā)行版,未完成API,旨在收集與內(nèi)部Spock遷移到JUnit Platform有關(guān)的用戶反饋。
這篇博客文章旨在鼓勵您進行項目到Spock 2.0的測試遷移,查看開始失敗的原因,修復(fù)它(如果由測試引起)或報告(如果它是Spock本身的回歸)。 這樣一來,在Spock方面,就有可能在Milestone 2之前改進代碼庫。除了對FOSS項目:-)做出貢獻之外,您的收益將是對所需更改的意識(保持在一邊) Spock 2.0更成熟后,就可以遷移了。
我計劃在下一個Spock 2版本可用時更新此博客文章。
由JUnit Platform提供支持
Spock 2.0 M1的主要變化是向JUnit 5的遷移(確切地說,是使用JUnit Platform 1.5(是JUnit 5的一部分而不是JUnit 4Runner API)執(zhí)行測試)。 這非常方便,因為應(yīng)該在支持JUnit平臺的任何地方(IDE,構(gòu)建工具,質(zhì)量工具等)自動識別和執(zhí)行Spock測試。 另外,平臺本身提供的功能(例如并行測試執(zhí)行)也應(yīng)該(最終)也適用于Spock。
要將Spock 2引入Gradle項目,需要修改Spock版本:
testImplementation( 'org.spockframework:spock-core:2.0-M1-groovy-2.5' )并通過JUnit平臺激活測試執(zhí)行:
test { useJUnitPlatform() }另一方面,對于Maven,仍然需要切換到Never Spock版本:
< dependency > < groupId >org.spockframework</ groupId > < artifactId >spock-core</ artifactId > < version >2.0-M1-groovy-2.5</ version > < scope >test</ scope > </ dependency >但這就是全部。 如果找到了junit-platform-engine(Spock 2的傳遞依賴項),則Surefire插件(如果使用版本3.0.0+)默認執(zhí)行JUnit Platform測試。
可以從GitHub獲得Gradle i Maven的最小工作項目。
其他變化
由于具有向JUnit Platform遷移的巨大變化,Spock 2.0 M1中的其他變化數(shù)量有限,從而使查找潛在的回歸原因變得容易一些。 作為遷移本身的副作用,所需的Java版本是8。
此外,所有參數(shù)化測試都會(最終)自動“展開”。 但是,那太好了,如Spock 1.x的spock-global-unroll所知,當(dāng)前沒有辦法 “滾動”特定的測試。
在發(fā)行說明中可以找到其他一些更改(例如暫時禁用的SpockReportingExtension )。
預(yù)計會有更多(可能是重大的)更改合并到里程碑2中。
JUnit 4規(guī)則問題
使用JUnit 4 @Rule (或@ClassRule )的測試可能會失敗,并顯示一條錯誤消息,提示未在測試之前創(chuàng)建/初始化所請求的對象(例如NullPointerException或IllegalStateException: the temporary folder has not yet been created ),或者之后沒有被驗證/清除(例如,來自AssertJ的軟斷言)。 JUnit平臺不再支持Rules API。 但是,為了@TemporaryFolder遷移(在基于Spock的集成測試中可能經(jīng)常使用@TemporaryFolder ),有一個專用的spock-junit4在內(nèi)部將JUnit 4規(guī)則包裝到Spock擴展中,并在Spock的生命周期中執(zhí)行它。 由于它是作為全局?jǐn)U展實現(xiàn)的,因此唯一需要添加的就是另一個依賴項。 在Gradle中:
testImplementation 'org.spockframework:spock-junit4:2.0-M1-groovy-2.5'或在Maven中:
< dependency > < groupId >org.spockframework</ groupId > < artifactId >spock-junit4</ artifactId > < version >2.0-M1-groovy-2.5</ version > < scope >test</ scope > </ dependency >這使遷移更加容易,但是最好考慮切換到本地Spock副本(如果可用/可行)。
其他問題和局限性
Spock 2.0 M1僅使用Groovy 2.5.8進行編譯和測試。 從M1開始,當(dāng)前在運行時阻止使用Groovy 3.0執(zhí)行。 不幸的是,除了關(guān)于不兼容的Groovy版本的明確錯誤消息外,只有一個非常神秘的錯誤消息:
Could not instantiate global transform class org.spockframework.compiler.SpockTransform specified at jar: file :/... .0-M1-groovy-2.5.jar! /spock-core-2 .0-M1-groovy-2.5.jar! /META-INF/services/org .codehaus.groovy.transform.ASTTransformation because of exception java.lang.reflect.InvocationTargetException它已被報告 ,應(yīng)通過M2進行增強。
令人遺憾的是,僅對Groovy 2.5的限制減少了使用Groovy 3進行實驗的人們的潛在反饋,該反饋非常接近穩(wěn)定版本(RC2,截至2019/2020)。 由于許多Spock測試僅適用于Groovy 3(特別是某些極端情況),因此特別不方便。 Spock 2在進入決賽之前可能會被調(diào)整為Groovy 3中的更改,或者至少會取消上述硬性限制。 同時,需要使用快照版本2.0-groovy-2.5-SNAPSHOT (已禁用該檢查)測試Groovy 3支持。
摘要
閱讀這篇文章后要做的動作很簡單。 嘗試在您的項目中臨時使用Spock 2.0 M1并報告任何發(fā)現(xiàn)的問題,以幫助使Spock 2.0更好:)。
翻譯自: https://www.javacodegeeks.com/2020/01/migrating-spock-1-3-tests-to-spock-2-0.html
spock測試
總結(jié)
以上是生活随笔為你收集整理的spock测试_将Spock 1.3测试迁移到Spock 2.0的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 258是什么意思 数字258代表什么意思
- 下一篇: wiremock 使用_使用WireMo