ScalaTest——テスト分類

4238 ワード

6.1 Pendingテスト待ち
プレースホルダは、次の考えをメモするのに便利ですが、まだ実現していないか、準備ができていません.
テスト待ち(Pending Test)という考えは実際に使うことが多いと思います.pending未実装または定義のテストをpendingで埋めることができるプレースホルダです.Pending Testは実際にはpendingを利用してテストをTODOと表記しています.次の例を示します.
class AlbumSpec extends FunSpec with Matchers with GivenWhenThen {
    describe("An Album") {
        it("can add an Artist to the album at construction time") {pending}
        it("can add opt to not have any artists at construction time") {pending}
   }
}

テストを実行し、次の結果を得ます.
[info]AlbumSpec:
[info]An Album
[info]- can add an Artist to the album at construction time (pending)
[info]- can add opt to not have any artists at construction time (pending)

テストはすべてpendingと表記されていることがわかります.pendingキーワードは、テストが完全に終わるまでテストの一番下に置くことができます.次の例を示します.
class AlbumSpec extends FunSpec with ShouldMatchers {
    describe("An Album") {
        it("can add an Artist to the album at construction time") {
            val album = new Album("Thriller", 1981, new Artist("Michael", "Jackson"))
            info("Making sure that Michael Jackson is indeed the artist of Thriller")
            pending
        }
        it("can add opt to not have any artists at construction time") {pending}
    }
}

テストを実行します.予想通り、次の結果が出力されます.
[info]AlbumSpec:
[info]An Album
[info]- can add an Artist to the album at construction time (pending)
[info]  + Making sure that Michael Jackson is indeed the artist of Thriller
[info]- can add opt to not have any artists at construction time (pending)

6.2 Ignoreタグ無視テスト
開発者はテストの有効性を確定していないか、生産コードが淘汰されたか、生産コードが複雑なため、これらのテストコードを一時的に無視する必要があります.
あるテストケースは、生産コードが修正されたために の状態にある可能性があります.残しておくと、テストを行うときに実行時間を無駄にし、削除すると後期に使用されるのではないかと心配します.このとき、ignoreを使用してテストをマークすることで、testコマンドの実行時には実行されませんが、同時に保存されます.次の例を示します.
import org.scalatest.{FunSpec, ShouldMatchers}

class AlbumTest extends FunSpec with ShouldMatchers {
  describe("An Album") {
    it("can add an Artist object to the album") {
      val album = new Album("Thriller", 1981, new Artist("Michael", "Jackson"))
      album.artist.firstName should be("Michael")
    }
   
    ignore("can add a Producer to an album at construction time") {
    new Album("Breezin\'", 1976, new Artist("George", "Benson"))
    //TODO: Figure out the implementation of an album producer
    } 
  }
}

テストを実行すると、次の出力が得られます.
[info]AlbumSpec:
[info]An Album
[info]- can add an Artist to the album at construction time
[info]- can add a Producer to an album at construction time !!! IGNORED !!!

これは、2番目のテストcan add a Producer to an album at construction timeのうちitignoreに置き換えられたため、テスト実行時に無視されます.上記の出力結果に反映されるのは、テスト名の後に!!! IGNORED !!!を付けたことです.このテストを復元するには、ignoreitに置き換えるだけです.
6.3 Tag分類テスト
タグ(Tagging)機能テストに を加えることで、グループ化してテストを実行できます.タグは、次のシーンで使用できます.
  • 時間のかかるテストをスキップしたい
  • いくつかのテストは関連する機能をチェックして一緒に実行する必要がある
  • あなたがテストに分けたい 等分類時
  • 異なるテストインタフェースはタグに対して独自の実装を持っているが、文字列を使用して分類タグを行う.次の例を示します.
    it("can add an Artist to the album at construction time", Tag("construction")) {
        //  
    }
    

    上記の例はFunSpecインタフェースでの実装であり、can add an Artist to the album at construction timeこのテストにconstructionのタグを付けた.
    SBTで特定のタグを実行するテストにも注意すべき点があります.
  • SBTのtestコマンドは、指定ラベルを実行するテストSBTが複数種類のテストフレームワークをサポートしていることを一時的にサポートできない.testコマンドが指定ラベルに従ってテストを実行できるようにするには、すべてのSBTがサポートするテストフレームワークがラベル機能をサポートする必要があり、現在ScalaTest、Specs 2はラベル機能をサポートしているが、ScalaCheckは現在ラベル機能をサポートしていない.
  • SBTのtest-onlyコマンドは、指定ラベルのテストを実行することをサポートする次の例のようにtest-onlyコマンドを使用して指定されたテストを実行することができる:test-only AlbumTest--n construction
  • テスト対象クラス名の後に–nとラベルを付けて行指定のテストを指します(複数のラベルがある場合は二重引用符で「ラベルを囲む」必要があります).ラベルを除外する場合は、前に述べたnをlに変更します.