将Spock 1.3测试迁移到Spock 2.0
了解Spock 2.0 M1(基于JUnit 5)的期望,如何在Gradle和Maven中遷移到它以及為什么報告發(fā)現(xiàn)的問題很重要:)。
重要說明 。 我絕對不建議您永久將您的現(xiàn)實項目遷移到Spock 2.0 M1! 這是2.x的第一個(預)發(fā)行版,未完成API,旨在收集與內部Spock遷移到JUnit Platform有關的用戶反饋。
這篇博客文章旨在鼓勵您進行項目到Spock 2.0的測試遷移,查看失敗的原因,修復(如果由測試引起)或報告(如果是Spock本身的回歸)。 這樣一來,在Spock方面,就有可能在Milestone 2之前改進代碼基礎。除了對FOSS項目:-)的貢獻外,您的收益是對所需更改的意識(保持在一邊) Spock 2.0更成熟后,就可以遷移了。
我計劃在下一個Spock 2版本可用時更新此博客文章。
由JUnit平臺提供支持
Spock 2.0 M1的主要變化是向JUnit 5的遷移(確切地說,是使用JUnit Platform 1.5(是JUnit 5的一部分而不是JUnit 4Runner API)執(zhí)行測試)。 這非常方便,因為應該在支持JUnit平臺的任何地方(IDE,構建工具,質量工具等)自動識別并執(zhí)行Spock測試。 另外,平臺本身提供的功能(例如并行測試執(zhí)行)也應該(最終)也適用于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所知。
在發(fā)行說明中可以找到其他一些更改(例如暫時禁用的SpockReportingExtension )。
預計會有更多(可能是重大的)更改合并到里程碑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的集成測試中可能經常使用@TemporaryFolder ),有一個專用的spock-junit4在內部將JUnit 4規(guī)則包裝到Spock擴展中,并在Spock的生命周期中執(zhí)行它。 由于它是作為全局擴展實現(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開始,當前在運行時阻止使用Groovy 3.0執(zhí)行。 不幸的是,沒有關于不兼容的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它已被報告 ,應通過M2進行增強。
令人遺憾的是,僅對Groovy 2.5的限制減少了使用Groovy 3進行實驗的人們的潛在反饋,該反饋非常接近穩(wěn)定版本(RC2,截至2019/2020)。 由于許多Spock測試僅適用于Groovy 3(特別是一些極端情況),因此特別不方便。 Spock 2在進入決賽之前可能會被調整為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 1.3测试迁移到Spock 2.0的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高效的企业测试-结论(6/6)
- 下一篇: 怎么自己设置壁纸(华为手机怎么自己设置壁