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的测试能力
* @see Hamcrest框架提供了一些相对通俗并高效的方法来进行一些junit比较困难的测试
* @see 比如比较数值大小、测试对象类型、测试数组元素等等
* @see Hamcrest下载地址为https://code.google.com/p/hamcrest/downloads/list
* @see JUnit下载地址为https://github.com/junit-team/junit/wiki/Download-and-Install
* @see ------------------------------------------------------------------------------------------------
* @see 1)所需jar(有两个)
* @see junit-4.10.jar
* @see hamcrest-all-1.3.jar
* @see ------------------------------------------------------------------------------------------------
* @see 2)注意事项
* @see 测试时可能报告类似这个的异常java.lang.NoSuchMethodError: org.hamcrest.core.AllOf.allOf
* @see 这时只需将hamcrest.jar移到junit.jar的前面就可以了,否则组合条件如allOf、anyOff等都会抛此异常
* @see ------------------------------------------------------------------------------------------------
* @create Jul 6, 2013 5:11:27 PM
* @author 玄玉<http://blog.csdn.net/jadyer>
*/
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://blog.csdn.net/jadyer", Matchers.instanceOf(String.class));
Assert.assertThat("http://blog.csdn.net/jadyer", Matchers.notNullValue());
Assert.assertThat(null, Matchers.nullValue()); //针对集合的测试
String[] users = {"玄玉", "Jadyer"};
Assert.assertThat(users, Matchers.hasItemInArray("玄玉"));
Map<String, String> userMap = new HashMap<String, String>();
userMap.put("11", "玄玉");
userMap.put("22", "Jadyer");
userMap.put("33", "http://blog.csdn.net/jadyer");
Assert.assertThat(userMap, Matchers.hasKey("22"));
Assert.assertThat(userMap, Matchers.hasValue("http://blog.csdn.net/jadyer"));
}
}

使用Hamcrest增强JUnit的测试能力的更多相关文章

  1. JUnit中测试异常抛出的方法

    最近在做TWU关于TDD的作业,对JUnit中测试异常抛出的方法进行了一些学习和思考. 在进行单元测试的时候有的时候需要测试某一方法是否抛出了正确的异常.例如,我有一个方法,里面对一个List进行读取 ...

  2. junit参数化测试的使用方法

    JUnit参数化测试的五个步骤:(1)为准备使用参数化测试的测试类指定特殊的运行器 org.junit.runners.Parameterized.(2)为测试类声明几个变量,分别用于存放期望值和测试 ...

  3. JAVAEE——spring02:使用注解配置spring、sts插件、junit整合测试和aop演示

    一.使用注解配置spring 1.步骤 1.1 导包4+2+spring-aop 1.2 为主配置文件引入新的命名空间(约束) 1.3 开启使用注解代替配置文件 1.4 在类中使用注解完成配置 2.将 ...

  4. junit参数化测试

    在前面的junit4初体验中我就说过,junit参数化测试是一只小怪兽,只逼编码痛点,现在我们这里来整理一下. 看过我前面的那篇初体验的就会发现一个问题,我们的测试代码大量的重复了.在这里先贴出原来的 ...

  5. Junit核心——测试集(TestSuite)

    关于测试集,实质就是包含若干个测试类的集合,通过一个具体的实例,让我们来了解一下Junit的测试集 package org.yezi.junit; public class Calcaute { pu ...

  6. 06-编写Hibernate API编写访问数据库的代码,使用Junit进行测试

    用到的注解: @Test:测试方法 @Before:初始化方法. @After:是否资源. 先执行Befere,然后执行Test,最后执行After. 第一步:新建一个Junit目录. 第二步:取名 ...

  7. Hibernate初探之单表映射——使用Junit进行测试

    编写一个Hibernate例子 第四步:使用Junit进行测试 三个常用的注解标签 @Test:测试方法 @Before:初始化方法 @After:释放资源 执行顺序:Before注解标签下的方法  ...

  8. spring-注解配置-junit整合测试-aop

    1 使用注解配置spring 1.1 步骤 导包4+2+spring-aop 1.为主配置文件引入新的命名空间(约束) 2.开启使用注解代理配置文件 3.在类中使用注解完成配置 1.2 将对象注册到容 ...

  9. Junit mockito 测试Controller层方法有Pageable异常

    1.问题 在使用MockMVC+Mockito模拟Service层返回的时候,当我们在Controller层中参数方法调用有Pageable对象的时候,我们会发现,我们没办法生成一个Pageable的 ...

随机推荐

  1. MTD中的nand驱动初步分析---面向u-boot

    之前提到nand驱动的初始化分析,有一个结构体 struct mtd_info始终贯穿这些代码 再来分析一下这个结构体的基本功能,如何初始化,如何使用 一.分析过程 看看结构体的出现和使用方式 第一次 ...

  2. (step6.3.3)hdu 1150(Machine Schedule——二分图的最小点覆盖数)

    题目大意:第一行输入3个整数n,m,k.分别表示女生数(A机器数),男生数(B机器数),以及它们之间可能的组合(任务数). 在接下来的k行中,每行有3个整数c,a,b.表示任务c可以有机器A的a状态或 ...

  3. 网页class命名规范

    CSS样式命名整理 页面结构 容器: container/wrap 总体宽度:wrapper 页头:header 内容:content 页面主体:main 页尾:footer 导航:nav 側栏:si ...

  4. Spring MVC集成Tiles使用方法

    首先,我们定义一个总体的tiles视图 /tiles/mainTemplate.jsp首先使用:<tiles:getAsString name="title"/>打印t ...

  5. ecshop 微信支付插件

    眼下已完毕支付測试,可以支付成功,支付逻辑自己实现.后台通知.发货通知.订单查询未測. 当中用到了redis 下载

  6. STL内存管理器的分配策略

    STL提供了很多泛型容器,如vector,list和map.程序员在使用这些容器时只需关心何时往容器内塞对象,而不用关心如何管理内存,需要用多少内存,这些STL容器极大地方便了C++程序的编写.例如可 ...

  7. JAVA泛型之<? extends T>:(通配符上限)和<? super T>(通配符下限)

    一.通配符上限和通配符下限接受的类型 通配符上限:<? extends T> 通配符下限:<? super T> 以下代码是测试结果,注释为解释说明 package xayd. ...

  8. TCP/IP详细解释--TCP/IP可靠的原则 推拉窗 拥塞窗口

    TCP和UDP在同一水平---传输层.但TCP和UDP最不一样的地方.TCP它提供了一个可靠的数据传输服务,TCP是面向连接的,那.使用TCP两台主机通过第一通信"拨打电话"这个过 ...

  9. hadoop每个家庭成员

    本文没有提到的原则.谈论hadoop项目周边,它的作用. hadoop这个词已经流行了很多年.大数据的记载会认为hadoop,然后hadoop的作用是什么呢? 官方定义:hadoop是一个开发和执行处 ...

  10. POJ 3589 Number-guessing Game(简单题)

    [题目简述]:两个四位数,假设后一个数中的某个数与前一个相应的数的位置和值都相等.则统计数目由几个这种数.记为count1吧. 假设后一个数中的某个数与前一个数的数值相等,但位置不同. 此时这种数的个 ...