JUnit4 Hamcrest匹配器常用方法总结

一.Hamcrest是什么?

Hamcrest is a library of matchers, which can be combined in to create flexible expressions of intent in tests.

Hamcrest 是一个为了测试为目的,且能组合成灵活表达式的匹配器类库。

二.Hamcrest jar包

  • hamcrest-core.jar -- This is the core API to be used by third-party framework providers. This includes the a foundation set of matcher implementations for common operations. This API is stable and will rarely change. You will need this library as a minimum.
  • hamcrest-library.jar -- The ever-growing library of Matcher implementations. This will grow between releases.
  • hamcrest-generator.jar -- A tool to allow many Matcher implementations to be combined into a single class so users don't have to remember many classes/packages to import. Generates code.
  • hamcrest-integration.jar -- Provides integration between Hamcrest and other testing tools, including JUnit (3 and 4), TestNG, jMock and EasyMock.

Alternatively, if you don't care:

hamcrest-all.jar -- Includes all of the above.

三.常用方法介绍

一般,在项目中导入hamcrest-core.jar, hamcrest-library.jar就能满足使用。

Eclipse新建一个JUnit test case; 测试类导入

import static org.hamcrest.Matchers.*;

测试方法如下:

@Test
public void testHamcrestMatchers() {
	// 核心匹配
	// allOf: 所有条件都必须满足,相当于&&
	assertThat("myname", allOf(startsWith("my"), containsString("name")));
	// anyOf: 其中一个满足就通过, 相当于||
	assertThat("myname", anyOf(startsWith("na"), containsString("name")));
	// both: &&
	assertThat("myname", both(containsString("my")).and(containsString("me")));
	// either: 两者之一
	assertThat("myname", either(containsString("my")).or(containsString("you")));
	// everyItem: 每个元素都需满足特定条件
	assertThat(Arrays.asList("my", "mine"), everyItem(startsWith("m")));
	// hasItem: 是否有这个元素
	assertThat(Arrays.asList("my", "mine"), hasItem("my"));
	// hasItems: 包含多个元素
	assertThat(Arrays.asList("my", "mine", "your"), hasItems("your", "my"));
	// is: is(equalTo(x))或is(instanceOf(clazz.class))的简写
	assertThat("myname", is("myname"));
	assertThat("mynmae", is(String.class));
	// anything(): 任何情况下,都匹配正确
	assertThat("myname", anything());
	// not: 否为真,相当于!
	assertThat("myname", is(not("you")));
	// nullValue(): 值为空
	String str = null;
	assertThat(str, is(nullValue()));
	// notNullValue(): 值不为空
	String str2 = "123";
	assertThat(str2, is(notNullValue()));
	// 字符串匹配
	// containsString:包含字符串
	assertThat("myname", containsString("na"));
	// stringContainsInOrder: 顺序包含,“my”必须在“me”前面
	assertThat("myname", stringContainsInOrder(Arrays.asList("my", "me")));
	// endsWith: 后缀
	assertThat("myname", endsWith("me"));
	// startsWith: 前缀
	assertThat("myname", startsWith("my"));
	// isEmptyString(): 空字符串
	assertThat("", isEmptyString());
	// equalTo: 值相等, Object.equals(Object)
	assertThat("myname", equalTo("myname"));
	assertThat(new String[] {
		"a", "b"
	}
	, equalTo(new String[] {
		"a", "b"
	}
	));
	// equalToIgnoringCase: 比较时,忽略大小写
	assertThat("myname", equalToIgnoringCase("MYNAME"));
	// equalToIgnoringWhiteSpace: 比较时, 首尾空格忽略, 比较时中间用单个空格
	assertThat(" my t name ", equalToIgnoringWhiteSpace(" my name "));
	// isOneOf: 是否为其中之一
	assertThat("myname", isOneOf("myname", "yourname"));
	// isIn: 是否为其成员
	assertThat("myname", isIn(new String[]{
		"myname", "yourname"
	}
	));
	// toString() 返回值校验
	assertThat(333, hasToString(equalTo("333")));
	// 数值匹配
	// closeTo: [operand-error, operand+error], Double或BigDecimal类型
	assertThat(3.14, closeTo(3, 0.5));
	assertThat(new BigDecimal("3.14"), is(closeTo(new BigDecimal("3"), new BigDecimal("0.5"))));
	// comparesEqualTo: compareTo比较值
	assertThat(2, comparesEqualTo(2));
	// greaterThan: 大于
	assertThat(2, greaterThan(0));
	// greaterThanOrEqualTo: 大于等于
	assertThat(2, greaterThanOrEqualTo(2));
	// lessThan: 小于
	assertThat(0, lessThan(2));
	// lessThanOrEqualTo: 小于等于
	assertThat(0, lessThanOrEqualTo(0));
	// 集合匹配
	// array: 数组长度相等且对应元素也相等
	assertThat(new Integer[]{
		1, 2, 3
	}
	, is(array(equalTo(1), equalTo(2), equalTo(3))));
	// hasItemInArray: 数组是否包含特定元素
	assertThat(new String[]{
		"my", "you"
	}
	, hasItemInArray(startsWith("y")));
	// arrayContainingInAnyOrder, 顺序无关,长度要一致
	assertThat(new String[]{
		"my", "you"
	}
	, arrayContainingInAnyOrder("you", "my"));
	// arrayContaining: 顺序,长度一致
	assertThat(new String[]{
		"my", "you"
	}
	, arrayContaining("my", "you"));
	// arrayWithSize: 数组长度
	assertThat(new String[]{
		"my", "you"
	}
	, arrayWithSize(2));
	// emptyArray: 空数组
	assertThat(new String[0], emptyArray());
	// hasSize: 集合大小
	assertThat(Arrays.asList("my", "you"), hasSize(equalTo(2)));
	// empty: 空集合
	assertThat(new ArrayList<String>(), is(empty()));
	// isIn: 是否为集合成员
	assertThat("myname", isIn(Arrays.asList("myname", "yourname")));
	// Map匹配
	Map<String, String> myMap = new HashMap<String, String>();
	myMap.put("name", "john");
	// hasEntry: key && value匹配
	assertThat(myMap, hasEntry("name", "john"));
	// hasKey: key匹配
	assertThat(myMap, hasKey(equalTo("name")));
	// hasValue: value匹配
	assertThat(myMap, hasValue(equalTo("john")));
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Junit springboot打印测试方法信息

    有时候需要使用junit做测试.方便日后参考. 目前流行的springboot 的junit测试,在很多时候需要使用.当前执行的方法是什么,我们只需要引入用注解方法就可以了. pom.xml引入依赖jar包 <!-- 测试 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId&

  • Springboot使用Junit测试没有插入数据的原因

    从写Junit开始笔者就有一个疑问,为什么执行插入测试方法成功了但是数据库里却没有对应数据,那怎么测试的呢?今天查阅了资料找到了原因 1.Junit测试原理 springboot中使用junit编写单元测试默认是事物回滚的,这样测试的脏数据不影响数据库,即实际上是执行了对应的插入操作,但是完成操作后执行了事务回滚操作,从而数据库中没有对应数据. 2.关闭自动事务回滚 在对应的测试方法上添加@Rollback(false)关闭回滚. 补充知识:Spring Boot Junit无法执行问题汇总 S

  • 详解IDEA JUnit5测试套件运行错误的问题

    1.问题 在Idea 2017.3中,建立JUnit5的测试用例Test Case,同时建立JUnit4的测试套件,运行测试套件时提示出错"java.lang.Exception: No runnable methods". 2.分析 Java进行单元测试时,一般会建立多个测试用例Test Case,或者多个测试类(每个测试类包括多个测试用例),但如果需要同时运行这些测试用例,一般在JUnit4中会采用测试套件,通过运行测试套件,在套件中一次运行多个测试用例类. 参考解答: 能够使用J

  • Spring整合Junit的使用详解

    我们在编写完Spring的代码后,往往需要测试代码的正确性,这个时候就需要用到单元测试了.我们这里使用的版本是junit4. 一个程序的入口是main方法,但是junit中不存在main方法,是因为junit内部的原理是它自己内部就有个main方法,运行扫描带@Test注解的方法,然后反射调用该方法,完成测试. 调用Spring框架的测试代码: @Test public void function(){ ApplicationContext applicationContext = new Cl

  • 如何在Maven项目中运行JUnit5测试用例实现

    本文演示了如何如何编写JUnit 5测试用例,在Maven项目中运行JUnit 5测试用例. 编写JUnit 5测试用例 如果你是Java开发者,那么对于JUnit应该就不陌生.JUnit是Java单元测试的基础工具. JUnit目前最新的版本是JUnit 5.x,但广大的Java开发者估计还停留在JUnit 4.x,因此有必要演示下如何编写JUnit 5测试用例. 引入JUnit 5依赖 相比较JUnit 4而言,JUnit 5一个比较大的改变是JUnit 5拥有与JUnit 4不同的全新的A

  • SpringBoot 单元测试JUnit的使用详解

    一.简介 JUnit是一款优秀的开源Java单元测试框架,也是目前使用率最高最流行的测试框架,开发工具Eclipse和IDEA对JUnit都有很好的支持,JUnit主要用于白盒测试和回归测试. 白盒测试:把测试对象看作一个打开的盒子,程序内部的逻辑结构和其他信息对测试人 员是公开的: 回归测试:软件或环境修复或更正后的再测试: 单元测试:最小粒度的测试,以测试某个功能或代码块.一般由程序员来做,因为它需要知道内部程序设计和编码的细节: 二.JUnit使用 1.pom.xml中添加JUnit依赖.

  • Java Junit单元测试实例详解

    测试分类 黑盒测试: 不需要写代码, 给输入值, 看程序是否能够输出期望的值 白盒测试: 需要写代码, 关注程序具体的执行流程 Junit 是白盒测试的一种 1.定义一个测试类 (测试用例) 包名: xxx.xxx.test 测试类名: 被测试的类型 + Test 2.定义测试方法: 可以单独运行 方法名: test + 测试的方法名 返回值: void 参数列表: 空参 3.给方法加 @Test 注解 (需要导入 Junit 环境依赖) 4.判定结果: 红色: 失败, 绿色: 成功 一般使用断

  • Spring Junit单元测试加载配置文件失败问题

    JUnit是Java中最有名的单元测试框架,用于编写和运行可重复的测试,多数Java的开发环境都已经集成了JUnit作为单元测试的工具.好的单元测试能极大的提高开发效率和代码质量. 使用SpringJunit单元测试,通过@ContextConfiguration加载配置文件后,只会在src/test/resources目录下寻找配置文件,不会加载src/main/resources中的. 这样就导致了项目可以正常启动,但是单元测试时会提示找不到注入的类. 可以通过pom.xml配置来解决该问题

  • JUnit4 Hamcrest匹配器常用方法总结

    一.Hamcrest是什么? Hamcrest is a library of matchers, which can be combined in to create flexible expressions of intent in tests. Hamcrest 是一个为了测试为目的,且能组合成灵活表达式的匹配器类库. 二.Hamcrest jar包 hamcrest-core.jar -- This is the core API to be used by third-party fr

  • 基于Spring概念模型:PathMatcher 路径匹配器

    目录 概述 PathMatcher接口源代码 AntPathMatcher使用例子 spring的路径匹配工具 AntPathMatcher 以下代码为本人使用过的路径匹配工具代码 核心代码是这一行 源代码版本 : spring-webmvc-5.1.4.RELEASE 概述 PathMatcher是Spring的一个概念模型接口,该接口抽象建模了概念"路径匹配器",一个"路径匹配器"是一个用于路径匹配的工具.它的使用者是 : org.springframework

  • Spring5路径匹配器PathPattern解析

    目录 Spring5路径匹配器PathPattern 1.PathPattern 只支持结尾部分使用 ** 2.PathPattern 支持使用例如 {*path} 路径匹配工具(AntPathMatcher vs PathPattern) Spring5路径匹配器PathPattern PathPattern 对url地址匹配的处理更加快速,它和AntPathMatcher 主要差异如下: 1.PathPattern 只支持结尾部分使用 ** 如果在路径的中间使用 ** 就会报错: @GetM

  • Java测试框架Mockito的简明教程

    什么是 Mock 测试 Mock 测试就是在测试过程中,对于某些不容易构造(如 HttpServletRequest 必须在Servlet 容器中才能构造出来)或者不容易获取比较复杂的对象(如 JDBC 中的ResultSet 对象),用一个虚拟的对象(Mock 对象)来创建以便测试的测试方法. Mock 最大的功能是帮你把单元测试的耦合分解开,如果你的代码对另一个类或者接口有依赖,它能够帮你模拟这些依赖,并帮你验证所调用的依赖的行为. 比如一段代码有这样的依赖: 当我们需要测试A类的时候,如果

  • Spring Security保护用户密码常用方法详解

    1. 前言 本节将对 Spring Security 中的密码编码进行一些探讨. 2. 不推荐使用md5 首先md5 不是加密算法,是哈希摘要.以前通常使用其作为密码哈希来保护密码.由于彩虹表的出现,md5 和sha1之类的摘要算法都已经不安全了.如果有不相信的同学 可以到一些解密网站 如 cmd5 网站尝试解密 你会发现 md5 和 sha1 是真的非常容易被破解. 3. Spring Security中的密码算法 ObjectProvider<PasswordEncoder>参数.这里的P

  • SpringBoot 应用程序测试实现方案

    目录 Pre Spring Boot 中的测试解决方案 测试 Spring Boot 应用程序 初始化测试环境 @SpringBootTest @SpringBootTest - webEnvironment @RunWith 注解与 SpringRunner 执行测试用例 使用 @DataJpaTest 注解测试数据访问组件 Service层和Controller的测试 使用 Environment 测试配置信息 使用 Mock 测试 Service 层 测试 Controller 层 小结

  • 基于Java的正则表达式

    正则表达式概念 正则表达式,又称正规表示法.常规表示法(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则的字符串.在很多文本编辑器里,正则表达式通常被用来检索.替换那些符合某个模式的文本.正则表过式用于操作字符串数据. String类里有一个方法 public boolean matches(String regex)告知此字符串是否匹配给定的正则表达式. 参数: reg

  • 浅谈Java中Spring Boot的优势

    Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置. Spring Boot 简化了基于 Spring 的应用开发,通过少量的代码就能创建一个独立的.产品级别的 Spring 应用. 作为一名 Java 程序员如果你已经厌恶了传统的开发模式,希望有一个全新的框架可以提供快速开发,简单集成的编程体验,强烈建议你学习了解 Spring Boot .

  • Java 程序员掌握 Spring Boot非常有必要

    Spring Boot从天而降 Spring Boot是企业级开发的整体整合解决方案,在现在企业项目开发中使用非常普遍,Spring Boot 2.0 的推出又激起了一阵学习 Spring Boot 热潮,给企业开发带来了巨大的变革,可以说现在是Java程序员到了必须学习SpringBoot的时候. Spring已经足够好了? Spring框架真的太好了,任何一个java开发用过之后都会像上瘾一样,爱不释手.会在遇到新问题的时候,或者找到某一个方法的时候,都会去看一下spring是不是已经有同类

  • Java Pattern和Matcher字符匹配方式

    目录 Pattern类定义 因此,典型的调用顺序是: Pattern类方法详解 Pattern类使用示例: Matcher类定义 Matcher类方法详解 1.Matcher类提供了三个匹配操作方法 2.返回匹配器的显示状态 3.int start(),int end(),int group()均有一个重载方法 4.Matcher类同时提供了四个将匹配子串替换成指定字符串的方法: 5.其他一些方法: 应用实例 Pattern类定义 public final class Pattern exten

随机推荐