Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在ScalaTest中处理双打_Scala_Scalatest - Fatal编程技术网

在ScalaTest中处理双打

在ScalaTest中处理双打,scala,scalatest,Scala,Scalatest,我刚刚开始使用ScalaTest,我使用以下内容来比较我的规范中的两个double,如下所示: it should "calculate the price" in { val x = new X(10,10,12,1000) assert(x.price() === 185.92) } 尽管我输入了一个错误的值185.92来与price函数返回的值进行比较(对于上面的情况,它实际返回10.23),规范还是通过了。我还有其他的规范,我只是比较了int,它们按预期工作。但

我刚刚开始使用ScalaTest,我使用以下内容来比较我的规范中的两个double,如下所示:

  it should "calculate the price" in {
    val x = new X(10,10,12,1000)
    assert(x.price() === 185.92)
  }
尽管我输入了一个错误的值185.92来与price函数返回的值进行比较(对于上面的情况,它实际返回10.23),规范还是通过了。我还有其他的规范,我只是比较了
int
,它们按预期工作。但是那些涉及双打的球员不管怎样都会通过。除了
断言
之外,我还应该使用其他函数来比较
双倍

编辑:


在我看来,您似乎在范围内有一个
相等[Double]
的隐式实例,其行为
org.scalatic.TolerantNumerics
,文档对此进行了说明

文档中的示例为:

implicit val doubleEquality = TolerantNumerics.tolerantDoubleEquality(0.01)
但在您的案例中,似乎有人用一个非常大的容差值对其进行了实例化

您也可以考虑使用<代码> +-<代码>:

assert(x.price() === 185.92 +- 0.01)

如果使用
FlatSpec
,您只需执行
actual shouldBe(预期+-公差)
;其他规范有类似的匹配器,而不是
应该是
。它在出现故障时比断言提供更好的消息,并且代码与其他测试一致。

不是您的实际问题,但您不应该使用双精度(
或任何浮点类型)来表示价格。使用
BigDecimal
或Spire类型-一种无论如何都可以执行精确十进制运算的类型。是的,我将使用Spire,但目前我只是在尝试ScalaTest。我的第一个理论是x.price()返回的类型认为此实例等于双185.92。您能否显示x.price()返回的类型?此外,您还可以混合使用org.scalactic.TypeCheckedEquality,或导入org.scalactic.TypeCheckedEquality。\如果类型不匹配,则会出现类型错误。@Billveners,已添加了
price
函数的定义。顺便说一句,我不能保证质量。它已经从scalatic中删除了吗?谢谢比尔。ScalaTest现在强调了主要问题。我混合了TypeCheckedTripleEquals,它在本文的测试之前(在同一规范中)显示了一个类型问题。该测试中函数的返回类型为
Double
,但我将其与
Int
文本值进行比较。因此,ScalaTest似乎忽略了类型不匹配的测试之后的测试。
assert(x.price() === 185.92 +- 0.01)