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)));
}
}
输出如下
评论前必须登录!
注册