Hamcrest 匹配器

2025年3月17日 | 阅读 3 分钟

Hamcrest 是一个流行的框架,可帮助我们创建匹配器对象。它用于编写软件测试,并且还用于 Java 编程语言中的单元测试。 Hamcrest 主要与其他单元测试框架一起使用,例如 JUnit、jMockit、Mockito 等。

Hamcrest 框架旨在使测试更具可读性和可理解性。它使用静态方法来构造一个断言,该断言非常容易编写和理解。它已被移植到 C#、Python、PHP、JavaScript、C++、Rust 和 Swift。

Hamcrest 框架旨在适应不同类型的单元测试框架。例如,Hamcrest 可以与 TestNG 和 JUnit(所有版本)一起使用。 Hamcrest 框架也与模拟框架一起使用,例如 JMock、EasyMock 和 Mockito。

以下是 Matchers 类的几个重要方法:

方法类型和方法名描述
Matcher<java.lang.Object> anything()它创建一个匹配器,该匹配器始终匹配对象,而与检查的对象无关。
Matcher<T> describedAs(java.lang.String description, Matcher<T> matcher, java.lang.object... values)它用于包装现有的匹配器,并覆盖其指定的描述。
Matcher<T> is(Matcher<T> matcher)它充当其他匹配器的形容词,同时保留其行为,并允许测试更具可读性。
Matcher<T> allOf(java.lang.Iterable<Matcher<? Super T>> matchers)它创建一个匹配器,如果检查的对象匹配所有指定的匹配器,则匹配。
AnyOf<T> anyOf(java.lang.Iterable<Matcher<? Super T>> matchers)它创建一个匹配器,如果检查的对象匹配任何指定的匹配器,则匹配。
Matcher<T> not(Matcher<T> matcher)它创建一个匹配器,该匹配器包装现有的匹配器,但它通过其将匹配对象的方式来反转逻辑。
Matcher<T> equalTo(T operand)它创建一个匹配器,当检查的对象在逻辑上等于指定的操作数时,则匹配。
Matcher<T> hasToString(Matcher<? super java.lang.String> toStringMatcher)它创建一个匹配器,该匹配器匹配其 toString 方法返回满足指定匹配器的值的任何已检查对象。
Matcher<T> instanceOf(java.lang.Class<?>> type)它创建一个匹配器,当检查的对象是指定类型的实例时,则匹配,这取决于调用 Class.isInstance(Object) 方法。
Matcher<java.lang.object> notNullValue()它创建了经常使用的 notNullValues 的快捷方式。
Matcher<T> sameInstance(T target)它创建一个匹配器,该匹配器仅当检查的对象与指定的 target 对象是同一实例时,则匹配。
Matcher<T> hasProperty(java.lang.String propertyName)它创建一个匹配器,当检查的对象具有具有指定名称的 JavaBean 属性时,则匹配。
IsArray<T> array(Matcher<? super T>>... elementMatchers)它创建一个匹配器,该匹配器匹配其元素与指定的匹配器一致的数组。
Matcher<java.util.Map<? extends K,? extends V>> hasEntry(K key, V value)它为 Maps 创建一个匹配器,当检查的 Map 包含至少一个其键和值等于指定键和值的条目时,则匹配。
Matcher<T[]> hasItemInArray(Matcher<? super T> elementMatcher)它为数组创建一个匹配器,当检查的数组包含至少一个应与指定的 elementMatcher 匹配的条目时,则匹配。
Matcher<java.math.BigDecimal> closeTo(java.math.BigDecimal operand, java.math.BigDecimal error)它创建 BigDecimals 的匹配器,当检查的 BigDecimal 对象等于指定的操作数,误差范围在 +/- 范围内时,则匹配。
Matcher<T> greaterThan(T value)它创建 Comparable 对象的匹配器,当检查的对象大于指定值时,则匹配。
Matcher<T> lessThan(T value)它创建 Comparable 对象的匹配器,当检查的对象小于指定值时,则匹配。
Matcher<java.lang.String> equalToIgnoringCase(java.lang.String expectedString)它创建 String 的匹配器,当检查的字符串等于指定的 expectedString(忽略大小写)时,则匹配。

以下代码段显示了如何使用 Hamcrest 匹配器。它显示给定的列表或数组 hasSize(5) 包含五个项目。这里,num 是包含一些整数的列表的对象。

以下代码段显示列表或数组中所有可用的项目都大于、小于大于或等于指定的数字。

因此,从前面的代码段可以清楚地看出,Hamcrest 框架使代码易于阅读和理解。

Hamcrest 的例子

在这里,我们将创建一个基本的 Hamcrest 示例。

HamcrestMockito.java

输出

Hamcrest Matchers
下一个主题Mockito 注释