【问题标题】:Is there a way to run a test, but not mark the whole suite as failed if it fails?有没有办法运行测试,但如果失败则不将整个套件标记为失败?
【发布时间】:2018-05-12 02:02:47
【问题描述】:

使用 Scalatest 可以将测试标记为“可选”。我的意思是无论如何都要运行它,但如果它失败了,不要将整个测试执行标记为失败(返回 0 而不是 1 到 shell)。

我知道ignorein 的替代品,但这并不完全符合我的意愿。

我想这样做的原因是我有一个项目,其中一些测试可能在某些网络中运行而在其他一些网络中失败。

这可能吗?

【问题讨论】:

  • 我不确定是否存在这样的选项,但我认为你最好专注于解决问题,或者如果检测到坏网络则通过测试。
  • 另一个选项是如果检测到坏网络使用cancel,但它只是中止一切,有没有办法在给定条件下中止单个测试?
  • 我认为一个简单的return 可以做到这一点。

标签: scala scalatest


【解决方案1】:

您可以使用tags 定义测试组。您可以将测试列入白名单或黑名单。如果您想将测试列入白名单,请为每个环境定义一个标签,如果测试应该在该环境中通过,请为其提供该标签。然后,在每个环境中,包含带有-n 标记的测试。如果您想将测试列入黑名单,请标记在每个环境中应该失败的测试,然后使用 -l 排除带有该标记的测试。过滤测试使用runner configuration 完成。

这是一个将需要外部服务的测试列入黑名单的示例。

object ServiceTest extends Tag("com.mycompany.tags.ServiceTest")

class MyTest extends WordSpec {
  "a foo" should {
    "connect to the service" taggedAs ServiceTest in {
      // ...
    }

    "do something without the service" in {
      // ...
    }
  }
}

可以也使用cancel() 中止测试。我不确定您所说的“中止一切”是什么意思,只有当前的测试用例被取消。但我认为最好在给定的环境中设定测试通过或失败的期望,如果没有,请进行调查。否则,如果网络不可用并且确实存在问题,比如 url 已更改,则很容易忽略取消的测试。

class MyTest extends WordSpec {
  "a foo" should {
    "connect to the service" in {
      if (serviceUnavailable()) cancel("Can't connect to service.")

      // ...
    }

    "do something without the network" in {
      // ...
    }
  }

  def serviceUnavailable(): Boolean = ???
}

【讨论】:

    猜你喜欢
    • 2019-09-12
    • 2019-10-09
    • 2021-07-04
    • 2015-09-29
    • 2020-02-01
    • 1970-01-01
    • 2014-07-13
    • 1970-01-01
    • 2011-10-09
    相关资源
    最近更新 更多