【问题标题】:scalatest matcher for Some(some long value)Some 的 scalatest 匹配器(一些长值)
【发布时间】:2021-12-16 01:29:18
【问题描述】:

我在基于 scalatest 的单元测试中进行了以下验证:

response shouldBe Some(any[Long])

我只需要检查响应是 Some 类型,包含任何 long 值。

但它失败了:

Expected :Some(null)
Actual   :Some(1635758033586)

正确的做法是什么?

【问题讨论】:

    标签: scala scalatest


    【解决方案1】:

    您似乎正在将 mockito 匹配器与 scala-test 匹配器结合起来。在这种情况下它不起作用。

    如果您的 long 值在每次测试运行中都不同,您可以断言它的存在。

    response.isDefined shouldBe true
    

    如果long 的值相同,则用文字断言它

    response shouldEqual Some(1635758033586)
    

    【讨论】:

    • 你说得对,我混合了两个。如果值始终相同怎么办?那么如何验证?
    【解决方案2】:

    警告,强烈的意见:

    我强烈建议您不要使用 ScalaTest 的匹配器 DSL,而是使用普通的旧断言: https://www.scalatest.org/user_guide/using_assertions

    匹配器 DSL 所做的只是为您提供另一种语法来表达您已经知道如何在常规 Scala 中执行的操作。如果你不知道,你可以学习它,然后在你的生产代码中应用这些知识,而匹配器 DSL 则不是这样。因此,我认为 matcher DSL 在很大程度上是毫无意义的,而且是对每个人时间的巨大浪费。

    至于您的问题“如果值始终相同怎么办,那么如何验证?”:有很多方法可以做到这一点。以下是其中一些:

    assert(response.contains(1635758033586))
    
    assertResult(Some(1635758033586)) {
      result
    }
    assertResult(1635758033586) {
      result.get
    }
    

    【讨论】:

      猜你喜欢
      • 2016-05-14
      • 2018-05-25
      • 2019-10-27
      • 2013-04-26
      • 1970-01-01
      • 2017-10-16
      • 1970-01-01
      • 1970-01-01
      • 2016-04-19
      相关资源
      最近更新 更多