Hamcrest Matchers介绍和用法

Hamcrest是一个流行的框架, 可以帮助我们创建匹配器对象。它用于编写软件测试, 并以Java编程语言执行单元测试。 Hamcrest主要用于其他单元测试框架, 例如JUnit, jMockit, Mockito等。
Hamcrest框架旨在使测试更具可读性和可理解性。它使用静态方法来构造非常容易编写和理解的断言。它已被移植到C#, Python, PHP, JavaScript, C ++, Rust和Swift。
Hamcrest框架旨在容纳不同类型的单元测试框架。例如, Hamcrest可以与TestNG和JUnit(所有版本)一起使用。 Hamcrest框架还与模拟框架(例如JMock, EasyMock和Mockito)一起使用。
以下是Matchers类的一些重要方法:

方法类型和方法名称 描述
匹配器< java.lang.Object> 任何() 它创建一个始终与对象匹配的匹配器, 而不管所检查的对象如何。
Matcher < T> describeAs(java.lang.String描述, Matcher < T> matcher, java.lang.object … 值) 它用于包装现有的匹配器, 并覆盖其指定的描述。
匹配< T> 是(匹配< T> 个匹配) 它不仅保留了其行为, 而且还充当其他匹配器的形容词, 使测试更具可读性。
匹配< T> allOf(java.lang.Iterable < 匹配< ?Super T > > 匹配器) 如果检查的对象与所有指定的匹配器匹配, 它将创建一个匹配器。
AnyOf < T> anyOf(java.lang.Iterable < Matcher < ?Super T > > 匹配器) 如果检查的对象与任何指定的匹配器匹配, 它将创建一个匹配器。
不匹配< T> (匹配< T> 匹配) 它创建了一个包装现有匹配器的匹配器, 但是它反转了匹配对象的逻辑。
Matcher < T> equalTo(T操作数) 当被检查的对象在逻辑上等于指定的操作数时, 它将创建一个匹配器。
匹配< T> hasToString(匹配< ?Super java.lang.String> toStringMatcher) 它创建一个匹配器, 该匹配器与任何检查的对象匹配, 该对象的toString方法返回的值满足指定的匹配器。
Matcher < T> instanceOf(java.lang.Class < ?> > 类型) 它创建一个匹配器, 当被检查的对象是指定类型的实例时, 该匹配器将通过调用Class.isInstance(Object)方法确定来匹配。
匹配器< java.lang.object> notNullValue() 它为常用的notNullValues创建快捷方式。
匹配< T> sameInstance(T目标) 它创建一个匹配器, 仅当被检查对象与指定目标对象是同一实例时才匹配。
Matcher < T> hasProperty(java.lang.String propertyName) 当被检查的对象具有指定名称的JavaBean属性时, 它将创建一个匹配器。
IsArray < T> array(Matcher < ?super T > > … elementMatchers) 它创建一个匹配器, 该匹配器匹配其元素被指定匹配器说服的数组。
Matcher < java.util.Map < ?扩展K , ?扩展V > > hasEntry(K键, V值) 当检查的地图包含至少一个键和值等于指定键和值的条目时, 它将为地图匹配创建匹配器。
匹配器< T []> hasItemInArray(匹配器< ?Super T> elementMatcher) 当检查的数组包含至少一个应与指定的elementMatcher匹配的项时, 它将为匹配的数组创建一个匹配器。
Matcher < java.math.BigDecimal> closeTo(java.math.BigDecimal操作数, java.math.BigDecimal错误) 它创建BigDecimals的匹配器, 当检查的BigDecimal对象等于+/-误差范围内的指定操作数时, 该匹配器进行匹配。
Matcher < T> 大于(T值) 它创建可比较对象的匹配器, 当检查的对象大于指定值时进行匹配。
Matcher < T> lessThan(T值) 它创建可比较对象的匹配器, 当检查的对象小于指定值时进行匹配。
Matcher < java.lang.String> equalToIgnoringCase(java.lang.String ExpectedString) 它创建一个String匹配器, 该字符串匹配器在检查的字符串等于指定的ExpectedString时匹配(忽略大小写)。
以下代码段显示了如何使用Hamcrest匹配器。它显示给定的列表或数组hasSize(5)包含五个项目。在这里, num是包含一些整数的列表的对象。
assertThat( num, hasSize(5));

下面的代码片段显示列表或数组中所有可用的项目都大于, 小于或大于或等于指定数目。
assertThat( num, everyItem(greaterThan(20))); assertThat( num, everyItem(greaterThanOrEqualTo(33))); assertThat( num, everyItem(lessThan(150)));

因此, 从前面的代码片段可以清楚地看出, Hamcrest框架使代码易于阅读和理解。
Hamcrest的例子
在这里, 我们将创建一个基本的Hamcrest示例。
HamcrestMockito.java
import static org.junit.Assert.*; import java.util.Arrays; import java.util.List; import static org.hamcrest.Matchers.*; import org.junit.Test; public class HamcrestMockito { @Test public void test() {List< Integer> num = Arrays.asList(99, 123, 45, 148, 33); assertThat( num, hasSize(5)); assertThat( num, hasItems(99, 45)); assertThat( num, everyItem(greaterThan(20))); assertThat( num, everyItem(greaterThanOrEqualTo(33))); assertThat( num, everyItem(lessThan(150))); } }

【Hamcrest Matchers介绍和用法】输出如下
Hamcrest Matchers介绍和用法

文章图片

    推荐阅读