pub:2015.7.11/upd:2016.8.3

【スピード入門】Specs2

Specs2によるテストコード記法

should-inブロックとマッチャーを用いたテストコードは見ればわかる感が高い。

はげしく流し書き(´・ω・`)

テストコード作成の流れと基本構造

テストコードは以下の流れで作成する。

  1. org.specs2.mutable.Specificationを継承してテストクラスを作成する
  2. should-inブロックを配置する
  3. マッチャーを使った評価式を記載する

完成したテストコードは以下のような形態をとる。
test/ApplicationSpec.scala

import org.specs2.mutable._

//...

class ApplicationSpec extends Specification {
 
  "ラベル(機能の名称など)" should {
 
    "ラベル(テスト項目名など)" in {
      [テストの対象] [マッチャー] ([評価に用いる値])
  }

//...

  }
}

実際にはこんな感じ。
test/ApplicationSpec.scala

import org.specs2.mutable._
import org.specs2.runner._
import org.junit.runner._
     
import play.api.test._
import play.api.test.Helpers._
     
/**  
 * Add your spec here.
 * You can mock out a whole application including requests, plugins etc.
 * For more information, consult the wiki.
 */  
@RunWith(classOf[JUnitRunner])
class ApplicationSpec extends Specification {
     
  "地球の歴史" should {
   //...    
    "1999:人類の滅亡" in {
      1999 must beEqualTo(1999)
    }                                                                                                                                                        
   //...
  }

   //...  
}    

should-inブロック

テストコードにおける以下の部分のこと。テストクラス内にはshouldブロックを、shouldブロックにはinブロックを複数配置してよい。

  "ラベル(機能の名称など)" should {
 
    "ラベル(テストの名称など)" in {
      //...
  
  }

実際にはこんな感じ。

//...
  "地球の歴史" should {
     
    "1999:人類の滅亡" in {
      1999 must beEqualTo(1999)
    }

    "2000:ネコによる地上支配の開始" in {
      2000 must beEqualTo(2000)
    }

  }

  "火星の歴史" should {

    "2222:ネコによる地上支配の開始" in {
      2222 must beEqualTo(2222)
    }

  }
//...

マッチャーを用いた評価式

以下の箇所のこと。

[テストの対象] [マッチャー]([評価に用いる値])

should-inブロックの節で人類の滅亡をまのあたりにして「must beEqualTo」がどんなものかは感じてもらったと思う。

マッチャーの種類

いっぱいある。いくつか例示しておく。

名前 評価内容
must beEqualTo 一致
must be_<= 評価に用いる値の方が大きい
beNull Nullである
must startWith 評価に用いる値ではじまる

テストコードの実行例

“+” がそのテスト項目をパスした証。

% activator test 
//...
[info] ApplicationSpec
[info] 
[info] 地球の歴史 should
[info] + 1999:人類の滅亡
[info] + 2000:ネコによる地上支配の開始
[info] 
[info] 火星の歴史 should
[info] + 2222:ネコによる地上支配の開始
[info] 
[info] Total for specification ApplicationSpec
[info] Finished in 20 ms
[info] 3 examples, 0 failure, 0 error
//...

REFERENCE

Leave a Reply

Your email address will not be published.