Scala單元測試
阿新 • • 發佈:2018-12-25
轉載自: http://blog.sina.com.cn/s/blog_a3869e9a01017dcn.html
Scala 的單元測試可以使用Java的JUnit 或 Scala的ScalaTest、ScalaCheck等等。
FunSuite的一個好處是不用給你所有的測試以“test”開頭起名。而且,可以更容易地給測試起很長的名稱,因為不需要把它們編碼為駝峰形式,而對於測試方法就必須這麼做了。
檢查方法是否丟擲了期待的異常,可以使用 ScalaTest 的 intercept 方法。
Scala 的單元測試可以使用Java的JUnit 或 Scala的ScalaTest、ScalaCheck等等。
簡單示例:
ScalaTest 提供了若干編寫測試的方法,最簡單的就是建立擴充套件 org.scalatest.Suite的類並在這些類中定義測試方法。Suite代表一個測試集。Scala 直譯器中通過呼叫 execute 方法執行 Suite。特質 Suite的 execute方法使用反射發現測試方法並呼叫它們。ScalaTest 提供了名為 FunSuite的特質,過載了execute,從而可以讓以函式值的方式而不是方法定義測試。import org.scalatest.FunSuite
class UtilTest1 extends FunSuite {
test("Util.getString 1") {
val v = UtilObject.getString(1)
assert(v == "1-str")
}
test("Util.getString 2") {
val v = UtilObject.getString(2)
assert(v == "2-str")
}
}
FunSuite裡的“Fun”表示函式。“test”是定義在FunSuite中的方法,將被ElementSuite的主構造器呼叫。圓括號裡的字串指定了測試的名稱,名稱需要唯一,大括號之間的是測試程式碼。測試程式碼是被作為傳名引數傳遞給test的函式,並由test函式登記在冊以備之後的執行。FunSuite的一個好處是不用給你所有的測試以“test”開頭起名。而且,可以更容易地給測試起很長的名稱,因為不需要把它們編碼為駝峰形式,而對於測試方法就必須這麼做了。
檢查方法是否丟擲了期待的異常,可以使用 ScalaTest 的 intercept 方法。
test("get execption") { intercept[Exception] { UtilObject.getExecption() } }
如果大括號之間的程式碼被一個引數指定的異常類的例項突然中斷,intercept 將返回捕獲的異常,以便於之後進行檢查。另一方面,如果程式碼沒有丟擲異常,或丟擲了不同的異常,intercept將丟擲 AssertionError,並且將在失敗報告中得到錯誤訊息。
如果需要使用mock的話可以使用org.mockito。