Hamcrest是一個書寫匹配器對象時允許直接定義匹配規則的框架.有大量的匹配器是侵入式的,例如UI驗證或者數據過濾,但是匹配對象在書寫靈活的測試是最常用.本教程將告訴你如何使用Hamcrest進行單元測試.
Hamcrest從一開始就設計結合不同的單元測試框架.例如,Hamcrest可以使用JUnit3和4和TestNG.(詳細查看完整Hamcrest發布中的例子).在一個現有的測試套件中遷移到使用Hamcrest風格的斷言是很容易的,因為其他斷言風格可以和Hamcrest的共存.
通過使用從mock Objects框架概念匹配器到Hamcrest匹配器橋接適配器Hamcrest也可以在mock objects框架中.例如,JMock 1系統規定是Hamcrest風格.Hamcrest提供了一個JMock 1適配器來允許你在JMock 1測試中使用Hamcrest匹配器.JMock 2不需要這樣一個適配器層,因為它被設計使用Hamcrest作為一個匹配庫.Hamcrest還提供了EasyMock 2適配器.同樣,詳細查看Hamcrest例子.
Hamcrest帶有一個有用的匹配器庫.以下是一些最重要的.
- 核心
- anything - 總是匹配,如果你不關心測試下的對象是什么是有用的
- describedAs - 添加一個定制的失敗表述裝飾器
- is - 改進可讀性裝飾器 - 見下 “Sugar”
- 邏輯
- allOf - 如果所有匹配器都匹配才匹配, short circuits (很難懂的一個詞,意譯是短路,感覺不對,就沒有翻譯)(像 Java &&)
- anyOf - 如果任何匹配器匹配就匹配, short circuits (像 Java ||)
- not - 如果包裝的匹配器不匹配器時匹配,反之亦然
- 對象
- equalTo - 測試對象相等使用Object.equals方法
- hasToString - 測試Object.toString方法
- instanceOf, isCompatibleType - 測試類型
- notNullValue, nullValue - 測試null
- sameInstance - 測試對象實例
- Beans
- hasProperty - 測試JavaBeans屬性
- 集合
- array - 測試一個數組元素test an array’s elements against an array of matchers
- hasEntry, hasKey, hasValue - 測試一個Map包含一個實體,鍵或者值
- hasItem, hasItems - 測試一個集合包含一個元素
- hasItemInArray - 測試一個數組包含一個元素
- 數字
- closeTo - 測試浮點值接近給定的值
- greaterThan, greaterThanOrEqualTo, lessThan, lessThanOrEqualTo - 測試次序
- 文本
- equalToIgnoringCase - 測試字符串相等忽略大小寫
- equalToIgnoringWhiteSpace - 測試字符串忽略空白
- containsString, endsWith, startsWith - 測試字符串匹配