spock_将Spock 1.3测试迁移到Spock 2.0

spock

spock

了解Spock 2.0 M1(基于JUnit 5)的期望,如何在Gradle和Maven中迁移到它以及为什么报告发现的问题很重要:)。

重要说明。 我绝对建议您永久将您的真实项目迁移到Spock 2.0 M1! 这是2.x的第一个(预)发行版,具有未完成的API,旨在收集与内部Spock迁移到JUnit Platform有关的用户反馈。

这篇博客文章旨在鼓励您进行项目到Spock 2.0的测试迁移,查看开始失败的原因,修复它(如果由测试引起)或报告(如果它是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)执行测试。 这非常方便,因为应该在支持JUnit平台的任何地方(IDE,构建工具,质量工具等)自动识别并执行Spock测试。 另外,平台本身提供的功能(例如并行测试执行)也应该(最终)也适用于Spock。

要将Spock 2引入Gradle项目,需要修改Spock版本:

testImplementation( 'org.spockframework:spock-core:2.0-M1-groovy-2.5' )

并通过JUnit平台激活测试执行:

 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+)默认情况下执行JUnit Platform测试。

可以从GitHub获得Gradle i Maven的最小工作项目。

其他变化

由于具有向JUnit Platform迁移的巨大变化,Spock 2.0 M1中的其他变化数量有限,从而使查找潜在的回归原因变得容易一些。 作为迁移本身的副作用,所需的Java版本是8。

此外,所有参数化测试都会(最终)自动“展开”。 很好,但是,目前还没有办法“滚动”特定的测试,如Spock 1.x的spock-global-unroll所知。

发行说明中可以找到其他一些更改(例如暂时禁用的SpockReportingExtension )。

预计会有更多(可能是重大的)更改合并到里程碑2中。

JUnit 4规则问题

使用JUnit 4 @Rule (或@ClassRule )的测试预期会失败,并显示一条错误消息,提示未在测试之前创建/初始化请求的对象(例如NullPointerExceptionIllegalStateException: the temporary folder has not yet been created ),或者之后没有被验证/清除(例如,来自AssertJ的软断言)。 JUnit平台不再支持Rules API。 但是,为了@TemporaryFolder迁移(在基于Spock的集成测试中可能经常使用@TemporaryFolder ),有一个专用的spock-junit4将JUnit 4规则内部包装到Spock扩展中,并在Spock的生命周期中执行它。 由于它是作为全局扩展实现的,因此唯一需要添加的就是另一个依赖项。 在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执行。 不幸的是,没有关于不兼容的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进行实验的潜在反馈,该反馈非常接近稳定版本(RC2,截至2019/2020)。 由于许多Spock测试仅适用于Groovy 3(特别是一些极端情况),因此特别不方便。 Spock 2在进入决赛之前可能会被调整为Groovy 3的变化,或者至少会取消上述硬性限制。 同时,需要使用快照版本2.0-groovy-2.5-SNAPSHOT (已禁用该检查)测试Groovy 3支持。

概要

阅读这篇文章后要做的动作很简单。 尝试在您的项目中临时使用Spock 2.0 M1并报告任何发现的问题,以帮助使Spock 2.0更好:)。

翻译自: https://www.javacodegeeks.com/2020/01/migrating-spock-1-3-tests-to-spock-2-0.html

spock

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值