Mid*_*rse 5 scala matcher scalatest
Scalatest是否提供和的匹配器NaN?
如果可以的话,我想使这些断言更具描述性:
Double.NaN.isNaN shouldBe true
Double.NegativeInfinity.isInfinite shouldBe true
Run Code Online (Sandbox Code Playgroud)
解决此问题的最灵活方法可能是使用ScalaTest 对符号的支持来处理属性上的布尔匹配。因此,以下测试均能正常工作,并在失败时给出非常有用的错误消息:
class DoubleSpec extends FreeSpec with Matchers {
"NaN should be NaN" in {
Double.box(Double.NaN) shouldBe 'NaN
}
"1 should not be NaN" in {
Double.box(1d) should not be 'NaN
}
"Infinity should be infinite" in {
Double.box(Double.PositiveInfinity) shouldBe 'Infinite
}
"1 should not be infinite" in {
Double.box(1d) should not be 'Infinite
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,符号支持仅适用于引用类型- T <:< AnyRef需要一个隐式参数。我欢迎提出处理建议,而不必Double.box每次都打电话。
您也可以为此编写自己的匹配器:
val NaN : BeMatcher[Double] = (left: Double) => MatchResult(
left.isNaN,
s"$left is not NaN",
s"$left is NaN"
)
"NaN should be NaN" in {
Double.NaN shouldBe NaN
}
"1 should not be NaN" in {
1d should not be NaN
}
Run Code Online (Sandbox Code Playgroud)
避免了装箱问题,并且类型安全性更高,但确实需要一些额外的代码行。
| 归档时间: |
|
| 查看次数: |
293 次 |
| 最近记录: |