新手上路

Hamcrest (唸做 [ham-crest]) 是一個宣告式 (declarative)、可以自訂 matcher 與 match rule 的框架,適用於測試、資料篩選 (data filtering)、輸入驗證 (input validation) 等

logo.jpg

(Hamcrest 的標誌)

Tip
Hamcrest 其實是 matchers 的 anagram (易位構詞),也就是將 matchers 裡的字母重新排列後的結果;其中 ham 是「火腿」,而 crest 是「鳥禽的冠毛」,這或許解釋了為什麼圖中會有一片片像火腿的東西,但為什麼有人在衝浪?

其中又以在測試中做斷言 (assertion) 的用法最為常見,這可以從 assertion 的演進說起…​

  • 第一代是 assert x == y,但發生錯誤時不知道 xy 分別是什麼。

  • 第二代是 assertEquals(x, y),能產生比較有用的 error message,但這會產生大量的 assert*(),例如 assertNotEquals(x, y)assertLessThan(x, y) 等。

  • 第三代則只有一個 assertThat() 再搭配一或多個 matcher,像是 assertThat(x, equalTo(y))assertThat(x, not(equalTo(y)))

    只要少量基本的 (primitive) matcher,搭配一些邏輯運算 (and、or、not) 就可以拼湊出多樣、複雜的 matcher expression。

Hamcrest 屬於第三代的做法,最初是 Java 的實現,後來被移植 (port) 到 PythonObjective-CSwift 等其他程式語言。

results matching ""

    No results matching ""