我正在使用ScalaTest运行一些测试,这些测试依赖于连接来测试服务器是否存在。我目前创建了自己的Spec,类似于:
abstract class ServerDependingSpec extends FlatSpec with Matchers {
def serverIsAvailable: Boolean = {
// Check if the server is available
}
}
当此方法返回false
时,是否可以忽略(但不会失败)测试?
目前我在" hackish"方式:
"Something" should "do something" in {
if(serverIsAvailable) {
// my test code
}
}
但我想要像
这样的东西whenServerAvailable "Something" should "do something" in {
// test code
}
或
"Something" should "do something" whenServerAvailable {
// test code
}
我认为我应该定义自定义标记,但我只能引用in
或ignore
的源代码,我不明白应该如何插入自定义实现。
我该如何做到这一点?
答案 0 :(得分:19)
您可以使用assume
:
"Something" should "do something" in {
assume(serverIsAvailable)
// my test code
}
您还可以使用cancel
:
"Something" should "do something" in {
if(!serverIsAvailable) {
cancel
}
// my test code
}
答案 1 :(得分:10)
您可以使用标记来实现此目的:
有关如何使用代码的文档:http://www.scalatest.org/user_guide/tagging_your_tests
使用命令行参数添加和删除标记测试:http://www.scalatest.org/user_guide/using_the_runner#specifyingTagsToIncludeAndExclude
示例代码:
import org.scalatest.Tag
object ServerIsAvailable extends Tag("biz.neumann.ServerIsAvailable")
"Something" should "do something" taggedAs(ServerIsAvailable) in {
// your test here
}
运行测试
运行测试是一件非常棘手的事情。它仅适用于 testOnly 和 testQuick 而非测试。 在示例 testOnly 是 testOnly *
的缩写 sbt "testOnly -- -l biz.neumann.ServerAvailable"
答案 2 :(得分:5)
以下是根据条件跳过测试的一些技巧:
object WhenServerAvailable extends Tag(if (serverIsAvailable) "" else classOf[Ignore].getName)
"Something" should "do something" taggedAs WhenServerAvailable in { ... }