You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在新版Kotest中正确使用Either.shouldBeRight匹配器?

解决kotest-assertions-arrow升级中的shouldBeRight废弃与导入错误问题

核心问题分析

你遇到的问题本质是依赖版本不匹配加上废弃API的替代方案不明确:kotest-assertions-arrow和arrow-core是强绑定的配套库,版本必须严格对齐;同时旧版本带lambda的shouldBeRight已经被移除,需要换用新的写法。

分步解决方法

  1. 强制版本对齐
    kotest-assertions-arrow的版本号和arrow-core完全同步,比如你要使用arrow-core v1.3.3,就必须把kotest-assertions-arrow也升级到v1.3.3。如果只升级其中一个,会导致类路径冲突,出现io.kotest相关的导入错误。

    • 清理依赖缓存:Maven执行clean install,Gradle执行clean build --refresh-dependencies,确保旧版本依赖被彻底清除。
  2. 替换废弃的shouldBeRight写法
    旧版本中带lambda的shouldBeRight已经被废弃并移除,新版本有两种替代方式:

    • 仅验证是Right类型:直接调用obj.shouldBeRight()
    • 需要对Right值做断言:
      推荐用Kotest原生的链式断言风格,代码更简洁:
      obj.shouldBeRight().blahblahblah.shouldBe(xyz)
      
      如果你习惯保留assertThat的写法,也可以先取出值再断言:
      val rightValue = obj.shouldBeRight()
      assertThat(rightValue.blahblahblah, equalTo(xyz))
      
  3. 检查导入语句
    新版本中shouldBeRight的正确导入路径是:

    import io.kotest.assertions.arrow.either.shouldBeRight
    

    如果你的代码里还是旧的导入路径,需要手动更新。

验证版本兼容性

确认你的依赖配置(以Gradle为例):

dependencies {
    implementation("io.arrow-kt:arrow-core:1.3.3")
    testImplementation("io.arrow-kt:kotest-assertions-arrow:1.3.3")
    // 同时确保Kotest的版本和kotest-assertions-arrow兼容,比如用Kotest 5.x版本
    testImplementation("io.kotest:kotest-runner-junit5:5.6.2")
}

内容的提问来源于stack exchange,提问作者Sixro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 04:55:02