有没有办法运行测试,但如果失败则不能将整个套件标记为失败?

时间:2018-05-09 14:22:25

标签: scala scalatest

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

我知道ignore作为in的替代品存在,但这并不完全符合我的意愿。

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

这可能吗?

1 个答案:

答案 0 :(得分:0)

您可以使用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()来中止测试。我不确定你的意思是“中止一切”,只有当前的测试用例被取消了。但我认为最好将测试的期望设置为在给定环境中通过或失败,如果他们不这样做,则进行调查。否则,如果网络不可用并且存在真正的问题,那么忽略已取消的测试就太容易了,比如更改了网址。

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 = ???
}