根据标题,我想知道在定义特定测试用例时是否可以向Scalatest提供“假设”。在此上下文中的假设将是测试的先决条件,这样如果假设评估为假,则将跳过测试而不是执行测试(并由跑步者相应地处理)。
在这种特殊情况下,我正在考虑测试之间的依赖关系 - 所以可能有一个基本测试可以验证方法是否返回任何,然后是后来的测试,这些测试会深入研究细节的回应。如果前一个测试失败了,我宁愿让后一个测试以某种方式标记为“不可运行”,而不是让它们失败。
那说我可以想象将来使用它来定义一些未连接的前置条件(例如硬盘驱动器必须至少有20MB的空间),所以如果有一种通用的方法在运行时跳过测试(而不是使用ignore
或pending
)我更愿意听到这一点。
欢迎使用专门的语法,但是如果我必须手动抛出某种类型的异常也是如此。
答案 0 :(得分:5)
ScalaTest 2.0(我认为)增加了对假设的支持:
Trait Assertions还提供了允许您取消测试的方法。如果测试所需的资源不可用,您将取消测试。例如,如果测试需要外部数据库在线,而不是,则可以取消测试以指示由于缺少数据库而无法运行。这样的测试假定数据库可用,您可以使用assume方法在测试开始时指示这个,如下所示:
assume(database.isAvailable)
答案 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)是真正的考验;如果假设为真,你只执行后者,所以你否定你的假设并将其与快捷方式结合起来。