前言
Hamcrest是用于Java的單元測試的框架那伐,它使用matcher
匹配器來進(jìn)行斷言。在Spring-boot-starter中集成了Hamcrest,無需而外引入应又。
核心API
- is
- 使用
is
匹配器使得程序更加易懂
String str1 = "text";
String str2 = " text ";
assertThat(str1, is(equalToIgnoringWhiteSpace(str2)));
- 用于簡單數(shù)據(jù)類型的判斷
String str1 = "text";
String str2 = "text";
assertThat(str1, is(str2));
- not
和is使用方式一樣宙项,只是含義相反。
- 使用
not
匹配器使得程序更加易懂
String str1 = "text";
String str2 = " text ";
assertThat(str1, not(equalToIgnoringWhiteSpace(str2)));
- 用于簡單數(shù)據(jù)類型的判斷
String str1 = "text";
String str2 = "text";
assertThat(str1, not(str2));
- containsString
是否包含子串
String str1 = "text123";
String str2 = "text";
assertThat(str1, containsString(str2));
- 以為某個字段開頭/結(jié)尾
String str1 = "text123";
assertThat(str1, startsWith("text"));// 以某個字符開頭
assertThat(str1, endsWith("text"));// 以某個字符開頭
- 判斷兩個對象是否為同一個實(shí)體
Cat cat=new Cat();
assertThat(cat, sameInstance(cat));
- 類似OR的效果
String str = "calligraphy";
String start = "call";
String end = "foo";
assertThat(str, anyOf(startsWith(start), containsString(end)));
- 類似AND的效果
String str = "calligraphy";
String start = "call";
String end = "phy";
assertThat(str, allOf(startsWith(start), endsWith(end)));
匹配器
Number 匹配器
assertThat(1, greaterThan(0)); // 大于
assertThat(5, greaterThanOrEqualTo(5)); //大于等于
assertThat(-1, lessThan(0)); // 小于
assertThat(-1, lessThanOrEqualTo(5)); // 小于等于
Text 匹配器
- 匹配空串
String str = "";
assertThat(str, isEmptyString()); // 空字符串
assertThat(str, isEmptyOrNullString()); // 空字符串或者null
- 匹配字符串相等
String str1 = "text";
String str2 = " text ";
assertThat(str1, equalToIgnoringWhiteSpace(str2)); // 忽略左右空白
assertThat(a, equalToIgnoringCase(b)); //忽略大小寫
Collections 匹配器
- 檢查某個元素是否在集合中
List<String> collection = Lists.newArrayList("ab","cd","ef");
assertThat(collection, hasItem("cd"));
assertThat(collection, not(hasItem("zz")));
assertThat(collection, hasItems("cd", "ab")); // 檢查多個元素是否在集合中
- 檢查所有元素
List<String> collection = Lists.newArrayList("ab","cd","ef");
assertThat(collection, hasItems("ab","cd","ef"));
assertThat(collection, hasItems("cd", "ab","ef")); // 錯誤
assertThat(collection, hasItems("ab","cd")); // 錯誤
assertThat(collection, containsInAnyOrder("cd", "ab","ef")); //正確,不區(qū)分順序
- 為空檢查
- 集合為空檢查
List<String> collection = Lists.newArrayList("ab","cd","ef");
assertThat(collection, empty()); // false, 用于檢查集合類型
- 數(shù)組為空檢查
String[] array = new String[] { "ab" };
assertThat(array, emptyArray()); // false
- map為空檢查
Map<String, String> maps = Maps.newHashMap();
assertThat(maps, equalTo(Collections.EMPTY_MAP));
- Iterable為空檢查
Iterable<String> collection = Lists.newArrayList();
assertThat(collection, emptyIterable());
- 檢查數(shù)目
- 檢查集合數(shù)目
List<String> list = Lists.newArrayList("ab", "cd", "ef");
assertThat(list, hasSize(3));
- 檢查iterable數(shù)目
Iterable<String> list = Lists.newArrayList("ab", "cd", "ef");
assertThat(list, iterableWithSize(3));
- 檢查每項(xiàng)的條件
List<String> list = Lists.newArrayList("ab", "cd", "ef");
assertThat(list, everyItem(equalTo("ab")));
Bean 匹配器
定義一個City的bean
@Data
@AllArgsConstructor
public class City {
String name;
String state;
}
- 測試是否存在某個屬性
City city = new City("shenzhen", "CA");
assertThat(city, hasProperty("state"));
assertThat(city, hasProperty("state", equalTo("CA"))); // 判斷是否存在某個屬性丁频,并且是否存在某個特性值
- 判斷兩個對象property值是否一樣
City city = new City("San Francisco", "CA");
City city2 = new City("San Francisco", "CA");
assertThat(city, samePropertyValuesAs(city2));