Scalatest是否支持假设?

时间:2011-08-17 16:29:18

标签: unit-testing scala scalatest

根据标题,我想知道在定义特定测试用例时是否可以向Scalatest提供“假设”。在此上下文中的假设将是测试的先决条件,这样如果假设评估为假,则将跳过测试而不是执行测试(并由跑步者相应地处理)。

在这种特殊情况下,我正在考虑测试之间的依赖关系 - 所以可能有一个基本测试可以验证方法是否返回任何,然后是后来的测试,这些测试会深入研究细节的回应。如果前一个测试失败了,我宁愿让后一个测试以某种方式标记为“不可运行”,而不是让它们失败。

那说我可以想象将来使用它来定义一些未连接的前置条件(例如硬盘驱动器必须至少有20MB的空间),所以如果有一种通用的方法在运行时跳过测试(而不是使用ignorepending)我更愿意听到这一点。

欢迎使用专门的语法,但是如果我必须手动抛出某种类型的异常也是如此。

2 个答案:

答案 0 :(得分:5)

ScalaTest 2.0(我认为)增加了对假设的支持:

  

Trait Assertions还提供了允许您取消测试的方法。如果测试所需的资源不可用,您将取消测试。例如,如果测试需要外部数据库在线,而不是,则可以取消测试以指示由于缺少数据库而无法运行。这样的测试假定数据库可用,您可以使用assume方法在测试开始时指示这个,如下所示:

assume(database.isAvailable)

http://www.scalatest.org/user_guide/using_assertions

答案 1 :(得分:1)

Scalacheck通常与scalatest结合使用,可以做到:

import org.scalacheck._

object XSpecifictaion extends Properties ("X") { 

    property ("sample (a - b)") = Prop.forAll { (a: Int, b: Int) =>  
      (a < b || (a - b >= 0)) }
}

! (a&lt; b)是你的假设,(a - b&gt; = 0)是真正的考验;如果假设为真,你只执行后者,所以你否定你的假设并将其与快捷方式结合起来。