maven:
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
<version>1.3</version>
在 Spock 单元测试框架中,Hamcrest 提供了一系列的匹配器方法,用于增强测试断言的表达力和可读性。以下是一些 Spock 中常用的 Hamcrest 匹配器方法及其详细介绍:
Hamcrest 方法 | 用途说明 | 示例用法 |
---|---|---|
equalTo |
检查对象是否等于预期值 | assertThat(actual, equalTo(expected)) |
not |
检查条件是否不满足 | assertThat(value, not(equalTo(5))) |
is |
增强可读性,相当于 equalTo ,也可与其他匹配器结合使用 |
assertThat(value, is(5)) |
nullValue |
检查对象是否为 null |
assertThat(object, nullValue()) |
notNullValue |
检查对象是否不为 null |
assertThat(object, notNullValue()) |
instanceOf |
检查对象是否为特定类的实例 | assertThat(object, instanceOf(Class)) |
hasItem |
检查集合中是否包含特定元素 | assertThat(collection, hasItem(item)) |
hasItems |
检查集合中是否包含多个特定元素 | assertThat(collection, hasItems(item1, item2)) |
containsString |
检查字符串是否包含子串 | assertThat(string, containsString(substring)) |
startsWith |
检查字符串是否以特定子串开始 | assertThat(string, startsWith(prefix)) |
endsWith |
检查字符串是否以特定子串结束 | assertThat(string, endsWith(suffix)) |
greaterThan |
检查值是否大于指定值 | assertThat(value, greaterThan(10)) |
lessThan |
检查值是否小于指定值 | assertThat(value, lessThan(10)) |
greaterThanOrEqualTo |
检查值是否大于或等于指定值 | assertThat(value, greaterThanOrEqualTo(10)) |
lessThanOrEqualTo |
检查值是否小于或等于指定值 | assertThat(value, lessThanOrEqualTo(10)) |
hasSize |
检查集合的大小是否为指定值 | assertThat(collection, hasSize(3)) |
everyItem |
检查集合中的每个元素是否满足特定条件 | assertThat(collection, everyItem(greaterThan(0))) |
allOf |
检查所有条件是否都满足 | assertThat(value, allOf(condition1, condition2)) |
anyOf |
检查至少一个条件是否满足 | assertThat(value, anyOf(condition1, condition2)) |
详细介绍
-
equalTo
: 用于断言两个对象的值是否相等。适用于基本数据类型和对象的比较。 -
not
: 用于断言某个条件不满足,通常与其他匹配器结合使用,反转其逻辑。 -
is
: 用于增强可读性,通常与equalTo
一起使用,但也可以与其他匹配器结合。 -
nullValue
/notNullValue
: 用于断言对象是否为null
或非null
。 -
instanceOf
: 用于断言对象是否为某个类的实例,非常适合类型检查。 -
hasItem
/hasItems
: 用于断言集合中包含一个或多个指定元素。 -
containsString
/startsWith
/endsWith
: 用于检查字符串内容,适合验证字符串是否包含特定子串或模式。 -
greaterThan
/lessThan
/greaterThanOrEqualTo
/lessThanOrEqualTo
: 用于数值比较,适合对数字范围进行断言。 -
hasSize
: 用于断言集合(如列表、集合)的大小。 -
everyItem
: 用于断言集合中的每个元素都满足某个条件,适合进行批量检查。 -
allOf
/anyOf
: 用于组合多个条件,allOf
要求所有条件都满足,而anyOf
则要求至少一个条件满足。
这些匹配器在 Spock 中结合 assertThat
使用,可以使测试断言更具表达力和可读性,帮助开发者编写更简洁、清晰的测试代码。