在詳細(xì)介紹 Specs2 用法之前,我們先了解一下 Specs2 的設(shè)計思想:
Specs2 的測試規(guī)范 Specification 的結(jié)構(gòu)非常簡單,它有多個 Fragment 構(gòu)成,這個 Fragment 的列表由 SpecificationStructure Trait 的 is 方法來指明:
http://wiki.jikexueyuan.com/project/scala-spece2-test/images/4.jpg" alt="PIC" />
其中:
Specs2 定義了一下隱含的轉(zhuǎn)換用來創(chuàng)建 Fragment 對象(定義在 org.specs2.specification.FragmentsBuilder Trait 中).比如:
String => Text 由字符串創(chuàng)建 Text 對象 String ! Result => Example 創(chuàng)建一個 Example 對象 等等
一旦構(gòu)造好這些對象,可以通過“^” 操作符來鏈接這些測試對象。 從而創(chuàng)建一個 Fragments 對象,它包含了一個 Seq[Fragment] 對象。
val fragments: Fragments =
"this text" ^
"is related to this Example" ! success
這個 Fragments 對象用來臨時存放一個 Fragment 對象列表,用來保證這些 Fragment 對象執(zhí)行時開始和結(jié)束于正確的 SpecStart 和 SpecEnd 位置。
在一個可變的 Specification 中,多個 Fragments 之間沒有”可見“的鏈接,它們是通過所謂的“副作用(side effect)”關(guān)聯(lián)(借助于 org.specs2.mutable 的增強版 FragmentsBuilder)。
// build an Example and add it to the specFragments variable
"this example must succeed" in { success }
"same thing here" in { success }
測試的執(zhí)行是由不同的 reports 對象來觸發(fā)。分為下面五步:
所有的測試報告由一組 ExecutingFragment 對象構(gòu)成,一個 Reducer 對象列表用來采集相關(guān)信息。