java单元测试——JUnit4Hamcrest
来源:互联网 发布:剑三男神脸数据 花哥 编辑:程序博客网 时间:2024/06/15 18:02
Hamcrest
一句话,如果你写单元测试,就应该用Hamcrest。
如今不写单元测试,你都不好意思说自己在做工程项目了。但你一般这么写断言呢?如果你还写成下面这样,我只能说你落伍了:
assertEquals(a, b);
请告诉我,哪个是执行结果,哪个是预期结果,不管你是怎样,反正大多数情况下,我是记不住的。所以,这个在只重功能不重可读性年代产生的API该更新了。于是,Hamcrest就是为了解决这样的问题而生的。
assertThat(a, is(b));//加入匹配规则。
很明显,前面一个是执行结果,后面一个是预期结果,当然这只是一个简单的例子。由于Hamcrest引入了matcher的概念(就是你看到的is部分【加入的匹配规则】),我们可以进行更多的组合:
assertThat(number, greaterThan(5));
assertThat(text, startsWith("Hello"));
assertThat(array, hasItem("World"));
Hamcrest如此好用,以至于JUnit已经将其吸纳进去。如果你现在用的JUnit是4.4之后的版本,那你已经有了Hamcrest。无需额外的配置,就可以拿过来用。
Hamcrest即是一个匹配器框架,以及增加了单元测试代码的可读性。package com.jadyer.service;import java.util.HashMap;import java.util.Map;import org.hamcrest.Matchers;import org.junit.Assert;import org.junit.Test;/** * ----------------------------------------------------------------------------------------- * Hamcrest框架提供了一些相对通俗并高效的方法来进行一些junit比较困难的测试 * 例如比较数值大小、测试对象类型、测试数组元素等等一系列的增强功能 * ----------------------------------------------------------------------------------------- * 本例中需要jar有两个:junit-4.10.jar、hamcrest-all-1.3.jar * 但是注意:测试时可能报告这个异常java.lang.NoSuchMethodError: org.hamcrest.core.AllOf.allOf * 这时把hamcrest.jar移到junit.jar前面即可,否则组合条件如allOf、anyOff等都会抛此异常 * ----------------------------------------------------------------------------------------- * Created by leesire<http://blog.see224.com/> */public class TestByHamcrest { /** * 如果用的是JUnit-4.10,那么这里可以使用org.junit.Assert类,它提供了assertThat的功能 * 如果用的是JUnit低版本,比如MyEclipse6.5自带的JUnit-4.3.1则未提供Assert.assertThat * 这时可以使用hamcrest-all-1.3.jar自带的org.hamcrest.MatcherAssert.assertThat() */ @Test public void testHamcrest(){ //50是否大于20 Assert.assertThat(50, Matchers.greaterThan(20)); //50是否大于或等于50 Assert.assertThat(50, Matchers.greaterThanOrEqualTo(50)); //50是否即大于20又小于60(allOf方法类似于Java中的&&) Assert.assertThat(50, Matchers.allOf(Matchers.greaterThan(20), Matchers.lessThan(60))); //50是否大于20或小于40(anyOf方法类似于Java中的||) Assert.assertThat(50, Matchers.anyOf(Matchers.greaterThan(20), Matchers.lessThan(40))); //测试"abc.txt"是否以"txt"结束 Assert.assertThat("abc.txt", Matchers.endsWith("txt")); Assert.assertThat("abc.txt", Matchers.startsWith("ab")); Assert.assertThat("abc.txt", Matchers.containsString("c.t")); Assert.assertThat(22+"aa", Matchers.hasToString("22aa")); Assert.assertThat("http://jadyer.cn/", Matchers.instanceOf(String.class)); Assert.assertThat("http://jadyer.cn/", Matchers.notNullValue()); Assert.assertThat(null, Matchers.nullValue()); //针对集合的测试 String[] users = {"leesire", "Jadyer"}; Assert.assertThat(users, Matchers.hasItemInArray("leesire")); Map<String, String> userMap = new HashMap<String, String>(); userMap.put("11", "leesire"); userMap.put("22", "Jadyer"); userMap.put("33", "http://blog.see224.com/"); Assert.assertThat(userMap, Matchers.hasKey("22")); Assert.assertThat(userMap, Matchers.hasValue("http://blog.see224.com/")); }}
阅读全文
0 0
- java单元测试——JUnit4Hamcrest
- java单元测试入门——JUnit
- Java单元测试工具——Junit
- Java单元测试工具——JUnit4使用
- 单元测试之道——基于junit的java单元测试 的读书笔记与思考
- 三、单元测试——单元测试概述
- Android自动化测试——java test unit(单元测试)
- 诊断 Java 代码:“杀手组合”— mixin、Jam 和单元测试
- JUNIT—Java单元测试的简单学习与使用
- Java单元测试
- java单元测试
- 【Java】单元测试
- Java单元测试
- java 单元测试
- Java单元测试
- Java单元测试
- java单元测试
- Java单元测试
- JavaWeb学习总结(三)——Tomcat服务器学习和使用(二)
- C/C++堆栈模型 转载两篇经典
- 线程的状态
- Android之Activity生命周期
- Spring的学习
- java单元测试——JUnit4Hamcrest
- 初试cocos
- ajax百度搜索框
- volatile的作用
- oracle '',null
- [DFS] leetcode 100. Same Tree
- Context都没弄明白,还怎么做Android开发?
- Android之FlexboxLayout弹性布局的介绍
- java系统高并发解决方案