使用Scalatest可以将测试标记为“可选”。我的意思是无论如何都要运行它,但是如果失败则不要将整个测试执行标记为失败(将0返回0而不是1)。
我知道ignore
作为in
的替代品存在,但这并不完全符合我的意愿。
我想这样做的原因是我有一个项目,其中某些测试可能会在某些网络中运行,而其他一些测试可能会失败。
这可能吗?
答案 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 = ???
}