如何以编程方式 ignore/skip 使用 ScalaTest 进行测试?
How to programmatically ignore/skip tests with ScalaTest?
我正在 运行 使用 ScalaTest 进行一些测试,这些测试依赖于与测试服务器的连接。我目前创建了自己的规范,类似于:
abstract class ServerDependingSpec extends FlatSpec with Matchers {
def serverIsAvailable: Boolean = {
// Check if the server is available
}
}
使用此方法时是否可以忽略(但不会失败)测试 returns 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
的源代码,我不明白我应该如何插入我的自定义实现。
我该如何完成?
您可以使用标签来实现:
有关如何使用标签的文档: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 而不是 test。
在示例中 testOnly 是 testOnly *
的缩写
sbt "testOnly -- -l biz.neumann.ServerAvailable"
您可以使用 assume
到 conditionally cancel a test:
"Something" should "do something" in {
assume(serverIsAvailable)
// my test code
}
或者您可以自己测试一些条件,然后使用 cancel
:
"Something" should "do something" in {
if(!serverIsAvailable) {
cancel
}
// my test code
}
这里有一些根据条件跳过测试的技巧:
object WhenServerAvailable extends Tag(if (serverIsAvailable) "" else classOf[Ignore].getName)
"Something" should "do something" taggedAs WhenServerAvailable in { ... }
我正在 运行 使用 ScalaTest 进行一些测试,这些测试依赖于与测试服务器的连接。我目前创建了自己的规范,类似于:
abstract class ServerDependingSpec extends FlatSpec with Matchers {
def serverIsAvailable: Boolean = {
// Check if the server is available
}
}
使用此方法时是否可以忽略(但不会失败)测试 returns 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
的源代码,我不明白我应该如何插入我的自定义实现。
我该如何完成?
您可以使用标签来实现:
有关如何使用标签的文档: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 而不是 test。 在示例中 testOnly 是 testOnly *
的缩写 sbt "testOnly -- -l biz.neumann.ServerAvailable"
您可以使用 assume
到 conditionally cancel a test:
"Something" should "do something" in {
assume(serverIsAvailable)
// my test code
}
或者您可以自己测试一些条件,然后使用 cancel
:
"Something" should "do something" in {
if(!serverIsAvailable) {
cancel
}
// my test code
}
这里有一些根据条件跳过测试的技巧:
object WhenServerAvailable extends Tag(if (serverIsAvailable) "" else classOf[Ignore].getName)
"Something" should "do something" taggedAs WhenServerAvailable in { ... }