【问题标题】:Does Scalatest have any support for assumptions?Scalatest 是否支持假设?
【发布时间】:2014-01-27 19:10:57
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您希望如何报告测试?被忽略、待处理、成功、失败?
  • 我也想要这个。用例是用测试内容填充数据库;如果失败,则不应运行将从数据库读取的测试(不是全部)。我更愿意将它们报告为“已忽略”。

标签: unit-testing scala scalatest


【解决方案1】:

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

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

assume(database.isAvailable)

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

【讨论】:

  • @akauppi 我同意。所以现在是。 :)
【解决方案2】:

经常和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 = 0) 是真正的测试;如果假设为真,您只执行后者,因此您否定您的假设并将其与快捷方式-OR 结合起来。

【讨论】:

    猜你喜欢
    • 2021-05-24
    • 1970-01-01
    • 2013-03-23
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多