5

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

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

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

欢迎使用专门的语法,但如果我必须手动抛出某种异常也没关系。

4

2 回答 2

5

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

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

assume(database.isAvailable)

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

于 2014-01-27T11:10:57.833 回答
1

经常与scalatest结合使用的Scalacheck可以做到:

import org.scalacheck._

object XSpecifictaion extends Properties ("X") { 

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

!(a < b) 是您的假设, (a - b >= 0) 是真正的测试;如果假设为真,则仅执行后者,因此您否定您的假设并将其与快捷方式或相结合。

于 2011-08-17T17:50:50.033 回答