前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spock 2.0 M1版本初探

Spock 2.0 M1版本初探

作者头像
FunTester
发布2020-02-17 16:17:45
1.2K0
发布2020-02-17 16:17:45
举报
文章被收录于专栏:FunTesterFunTester

spock2进行了较大的升级,基于Junit5,基于Groovy3(Groovy3要求JDK9+)

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

JUnit Platform提供支持

Spock 2.0 M1的主要变化是向JUnit 5的迁移(确切地说,是使用JUnit Platform 1.5(是JUnit 5的一部分而不是JUnit 4运行器API 执行测试)。这非常方便,因为应该在支持JUnit平台的任何地方(IDE,构建工具,质量保障工具等)自动识别并执行Spock测试。另外,平台本身提供的功能也应该也适用于Spock

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

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

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

代码语言:javascript
复制
test {
    useJUnitPlatform()
}

另一方面,对于Maven,仍然需要切换到Never Spock版本:

代码语言:javascript
复制
<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测试。

其他变化

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

此外,所有参数化测试都会自动进行。但是,那太好了,目前还没有办法 “滚动”特定的测试,如Spock 1.x的spock-global-unroll所知。

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

JUnit 4 Rule问题

使用JUnit 4 @Rule的测试@ClassRule可能会失败,并显示错误消息,提示未在测试(例如NullPointerExceptionIllegalStateException: the temporary folder has not yet been created)之前创建/初始化所请求的对象,或者在测试之后未进行验证/清除(例如,来自AssertJ的软断言) 。JUnit平台不再支持Rules API。但是,为了使迁移更容易(@TemporaryFolder可能在基于Spock的集成测试中经常使用),有一个专用工具spock-junit4可以在内部将JUnit 4规则包装到Spock扩展中,并在Spock的生命周期中执行它。由于它是作为全局扩展实现的,因此唯一需要添加的就是另一个依赖项。在Gradle中:

testImplementation 'org.spockframework:spock-junit4:2.0-M1-groovy-2.5'

或在Maven中:

代码语言:javascript
复制
<dependency>
    <groupId>org.spockframework</groupId>
    <artifactId>spock-junit4</artifactId>
    <version>2.0-M1-groovy-2.5</version>
    <scope>test</scope>
</dependency>

其他问题

Spock 2.0 M1仅使用Groovy 2.5.8进行编译和测试。从M1开始,当前在运行时阻止使用Groovy 3.0执行。不幸的是,没有关于不兼容的Groovy版本的明确错误消息,只有一个非常隐秘的错误消息:

代码语言:javascript
复制
Could not instantiate global transform class org.spockframework.compiler.SpockTransform specified at
jar:file:/.../spock-core-2.0-M1-groovy-2.5.jar!/META-INF/services/org.codehaus.groovy.transform.ASTTransformation
because of exception java.lang.reflect.InvocationTargetException

令人遗憾的是,仅对Groovy 2.5的限制减少了使用Groovy 3工作的人们的潜在反馈,该反馈非常接近稳定版本(RC2)。由于许多Spock测试仅适用于Groovy 3(特别是某些极端情况),因此特别不方便。Spock 2在发行版之前可能会被调整为Groovy 3中的更改已提供兼容性,或者至少会取消上述硬性限制。


  • 郑重声明:文章首发于公众号“FunTester”,禁止第三方(腾讯云除外)转载、发表。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FunTester 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 由JUnit Platform提供支持
  • 其他变化
  • JUnit 4 Rule问题
  • 其他问题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档