ScalaTest中匹配Some(任意Long值)的正确写法是什么
错误原因
你写法出错的核心原因是any[Long]是Mockito提供的参数匹配器,仅用于打桩时的入参匹配场景,不能直接作为值断言的占位符使用。直接在shouldBe参数中调用any[Long]时,该方法会直接返回null,因此你的代码实际等价于response shouldBe Some(null),和实际返回的Some(1635758033586)自然匹配失败。
正确实现方式
以下是几种不需要额外依赖的原生ScalaTest实现,都可以满足需求:
方式1:模式匹配写法(最直观)
直接匹配结构和类型,一行完成校验:
// 需提前引入org.scalatest.matchers.should.Matchers._ response should matchPattern { case Some(_: Long) => }
方式2:分步校验(可读性最高)
先校验是Some类型,再校验内部值类型,适合需要拆分定位问题的场景:
response shouldBe defined // 校验为非空的Some类型 response.get shouldBe a[Long] // 校验内部值是Long类型
方式3:Option匹配器组合写法
用Option专属的contain匹配器组合类型校验:
// 同样需要引入上述Matchers依赖 response should contain (a[Long])
内容的提问来源于stack exchange,提问作者Mandroid
相关产品推荐
相关产品推荐

