鍍金池/ 教程/ Scala/ 簡(jiǎn)介
Spec2 可選的 Matcher(匹配運(yùn)算)
測(cè)試結(jié)果 Results
Specs2 的設(shè)計(jì)思想
Fragments API 簡(jiǎn)介
簡(jiǎn)介
期望結(jié)果
Spec2 內(nèi)置的 Matcher(匹配運(yùn)算)

簡(jiǎn)介

測(cè)試也是開發(fā)過程中非常重要一環(huán),本博客介紹 Scala 開發(fā)的主要目的是為了日后的 Play 應(yīng)用開發(fā)做基礎(chǔ),開發(fā)環(huán)境采用 IntelliJ IDEA 集成開發(fā)環(huán)境。因此使用 IntelliJ 創(chuàng)建 Play 應(yīng)用時(shí)缺省使用的測(cè)試包(基于 Spec2)

http://wiki.jikexueyuan.com/project/scala-spece2-test/images/1.jpg" alt="PIC" />

Play 應(yīng)用缺省在 test 目錄下創(chuàng)建了兩個(gè)測(cè)試類: 為 ApplicationSpec 和 IntegrationSpec ,我們暫時(shí)不去管它們。以后在介紹 Play 開發(fā)時(shí)再說。

本系列博客介紹 Spec2 測(cè)試(其它測(cè)試使用的模板還可以是 scalatest, JUnit,TestNG),其測(cè)試的為通用的類(和 Play 特定的測(cè)試無關(guān))。

Specs2 的測(cè)試規(guī)范分為兩大類型:

  • 單元測(cè)試規(guī)范: 這種測(cè)試規(guī)范和測(cè)試代碼混合在一起,它通常用來測(cè)試單個(gè)類。
  • 驗(yàn)收測(cè)試規(guī)范: 這種測(cè)試規(guī)范的為一個(gè)整體,與其測(cè)試代碼分開,它通常用于熟悉集成或驗(yàn)收測(cè)試規(guī)范。

Specs2 測(cè)試為一種行為驅(qū)動(dòng)測(cè)試方法,它的著重點(diǎn)在于使用可由人員的文字描述代碼期望的一些行為,配合測(cè)試代碼來驗(yàn)證所需要測(cè)試的代碼符合期望的規(guī)范。

下面我們使用例子來說明一下兩種風(fēng)格的測(cè)試規(guī)范:

單元測(cè)試

單元測(cè)試規(guī)范派生于 org.specs2.mutable.Specification ,使用 should/in 的格式。

import org.specs2.mutable._

class HelloWorldUnitSpec extends Specification {

  "HelloWorldUnit" should {
    "contain 11 characters" in {
      "Hello world" must have size(11)
    }
    "start with 'Hello'" in {
      "Hello world" must startWith("Hello")
    }
    "end with 'world'" in {
      "Hello world" must endWith("world")
    }
  }
}

驗(yàn)收測(cè)試規(guī)范

驗(yàn)收測(cè)試規(guī)范繼承自 org.specs2.Specification ,并且定義 is 方法。

import org.specs2._

class HelloWorldAcceptanceSpec extends Specification { def is = s2"""

 This is a specification to check the 'Hello world' string

 The 'Hello world' string should
   contain 11 characters                                         $e1
   start with 'Hello'                                            $e2
   end with 'world'                                              $e3
                                                                 """

  def e1 = "Hello world" must have size(11)
  def e2 = "Hello world" must startWith("Hello")
  def e3 = "Hello world" must endWith("world")
}

運(yùn)行測(cè)試

運(yùn)行測(cè)試的方法有很多種,在 Play 環(huán)境下,可以使用 play test 來運(yùn)行,在 IntelliJ IDEA 可以通過菜單

http://wiki.jikexueyuan.com/project/scala-spece2-test/images/2.jpg" alt="PIC" />

如果需要運(yùn)行或調(diào)試單個(gè)測(cè)試用例,可以在測(cè)試用例點(diǎn)擊右鍵,選擇

http://wiki.jikexueyuan.com/project/scala-spece2-test/images/3.jpg" alt="PIC" />