テストサーバーへの接続が存在することに依存するScalaTestでいくつかのテストを実行しています。私は現在、次のような独自の仕様を作成しました。
abstract class ServerDependingSpec extends FlatSpec with Matchers {
def serverIsAvailable: Boolean = {
// Check if the server is available
}
}
このメソッドがfalse
を返す場合、テストを無視することはできますか(失敗することはありません)?
現在、私は「ハック」な方法でそれを行っています。
"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では機能しませんテスト。この例では、testOnlyはtestOnly *の略です。
sbt "testOnly -- -l biz.neumann.ServerAvailable"
assume
を使用できます:
"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 { ... }