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

(Hamcrest 的標誌)
Tip
|
Hamcrest 其實是 matchers 的 anagram (易位構詞),也就是將 matchers 裡的字母重新排列後的結果;其中 ham 是「火腿」,而 crest 是「鳥禽的冠毛」,這或許解釋了為什麼圖中會有一片片像火腿的東西,但為什麼有人在衝浪? |
其中又以在測試中做斷言 (assertion) 的用法最為常見,這可以從 assertion 的演進說起…
-
第一代是
assert x == y
,但發生錯誤時不知道x
跟y
分別是什麼。 -
第二代是
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) 到 Python、 Objective-C、 Swift 等其他程式語言。