Some(一些长值)的最高级匹配器
scalatest matcher for Some(some long value)
我在基于 scalatest 的单元测试中进行了以下验证:
response shouldBe Some(any[Long])
我只需要检查响应的类型是否包含任何长值。
但它失败了:
Expected :Some(null)
Actual :Some(1635758033586)
正确的做法是什么?
您似乎将 mockito 匹配器与 scala-test 匹配器组合在一起。在这种情况下它不起作用。
如果 long
的值在每个测试中都不同 运行,您可以断言它的存在。
response.isDefined shouldBe true
如果 long
的值相同,则用文字断言
response shouldEqual Some(1635758033586)
警告,前方强烈意见:
我强烈建议您不要使用 ScalaTest 的匹配器 DSL,而是使用普通的旧断言:
https://www.scalatest.org/user_guide/using_assertions
匹配器 DSL 所做的只是为您提供另一种语法来表达您已经知道如何在常规 Scala 中执行的操作。如果您不知道,您可以学习它并稍后将这些知识应用到您的生产代码中,而匹配器 DSL 则不是这种情况。因此,我认为匹配器 DSL 在很大程度上是毫无意义的,而且是对每个人时间的巨大浪费。
关于您的问题“如果值始终相同怎么办,那么如何验证?”:有很多方法可以做到这一点。以下是其中一些:
assert(response.contains(1635758033586))
assertResult(Some(1635758033586)) {
result
}
assertResult(1635758033586) {
result.get
}
我在基于 scalatest 的单元测试中进行了以下验证:
response shouldBe Some(any[Long])
我只需要检查响应的类型是否包含任何长值。
但它失败了:
Expected :Some(null)
Actual :Some(1635758033586)
正确的做法是什么?
您似乎将 mockito 匹配器与 scala-test 匹配器组合在一起。在这种情况下它不起作用。
如果 long
的值在每个测试中都不同 运行,您可以断言它的存在。
response.isDefined shouldBe true
如果 long
的值相同,则用文字断言
response shouldEqual Some(1635758033586)
警告,前方强烈意见:
我强烈建议您不要使用 ScalaTest 的匹配器 DSL,而是使用普通的旧断言: https://www.scalatest.org/user_guide/using_assertions
匹配器 DSL 所做的只是为您提供另一种语法来表达您已经知道如何在常规 Scala 中执行的操作。如果您不知道,您可以学习它并稍后将这些知识应用到您的生产代码中,而匹配器 DSL 则不是这种情况。因此,我认为匹配器 DSL 在很大程度上是毫无意义的,而且是对每个人时间的巨大浪费。
关于您的问题“如果值始终相同怎么办,那么如何验证?”:有很多方法可以做到这一点。以下是其中一些:
assert(response.contains(1635758033586))
assertResult(Some(1635758033586)) {
result
}
assertResult(1635758033586) {
result.get
}