1. package com.jadyer.service;
  2.  
  3. import java.util.HashMap;
  4. import java.util.Map;
  5.  
  6. import org.hamcrest.Matchers;
  7. import org.junit.Assert;
  8. import org.junit.Test;
  9.  
  10. /**
  11. * 使用Hamcrest增强JUnit的测试能力
  12. * @see Hamcrest框架提供了一些相对通俗并高效的方法来进行一些junit比较困难的测试
  13. * @see 比如比较数值大小、测试对象类型、测试数组元素等等
  14. * @see Hamcrest下载地址为https://code.google.com/p/hamcrest/downloads/list
  15. * @see JUnit下载地址为https://github.com/junit-team/junit/wiki/Download-and-Install
  16. * @see ------------------------------------------------------------------------------------------------
  17. * @see 1)所需jar(有两个)
  18. * @see junit-4.10.jar
  19. * @see hamcrest-all-1.3.jar
  20. * @see ------------------------------------------------------------------------------------------------
  21. * @see 2)注意事项
  22. * @see 测试时可能报告类似这个的异常java.lang.NoSuchMethodError: org.hamcrest.core.AllOf.allOf
  23. * @see 这时只需将hamcrest.jar移到junit.jar的前面就可以了,否则组合条件如allOf、anyOff等都会抛此异常
  24. * @see ------------------------------------------------------------------------------------------------
  25. * @create Jul 6, 2013 5:11:27 PM
  26. * @author 玄玉<http://blog.csdn.net/jadyer>
  27. */
  28. public class TestByHamcrest {
  29. /**
  30. * 如果用的是JUnit-4.10,那么这里可以使用org.junit.Assert类,它提供了assertThat的功能
  31. * 如果用的是JUnit低版本,如MyEclipse6.5自带的JUnit-4.3.1则未提供Assert.assertThat功能
  32. * 这时可以使用hamcrest-all-1.3.jar自带的org.hamcrest.MatcherAssert.assertThat()方法
  33. */
  34. @Test
  35. public void testHamcrest(){
  36. //50是否大于20
  37. Assert.assertThat(50, Matchers.greaterThan(20));
  38. //50是否大于或等于50
  39. Assert.assertThat(50, Matchers.greaterThanOrEqualTo(50));
  40.  
  41. //50是否即大于20又小于60(allOf方法类似于Java中的&&)
  42. Assert.assertThat(50, Matchers.allOf(Matchers.greaterThan(20), Matchers.lessThan(60)));
  43. //50是否大于20或小于40(anyOf方法类似于Java中的||)
  44. Assert.assertThat(50, Matchers.anyOf(Matchers.greaterThan(20), Matchers.lessThan(40)));
  45.  
  46. //测试"abc.txt"是否以"txt"结束
  47. Assert.assertThat("abc.txt", Matchers.endsWith("txt"));
  48. Assert.assertThat("abc.txt", Matchers.startsWith("ab"));
  49. Assert.assertThat("abc.txt", Matchers.containsString("c.t"));
  50. Assert.assertThat(22+"aa", Matchers.hasToString("22aa"));
  51. Assert.assertThat("http://blog.csdn.net/jadyer", Matchers.instanceOf(String.class));
  52. Assert.assertThat("http://blog.csdn.net/jadyer", Matchers.notNullValue());
  53. Assert.assertThat(null, Matchers.nullValue());
  54.  
  55. //针对集合的测试
  56. String[] users = {"玄玉", "Jadyer"};
  57. Assert.assertThat(users, Matchers.hasItemInArray("玄玉"));
  58. Map<String, String> userMap = new HashMap<String, String>();
  59. userMap.put("11", "玄玉");
  60. userMap.put("22", "Jadyer");
  61. userMap.put("33", "http://blog.csdn.net/jadyer");
  62. Assert.assertThat(userMap, Matchers.hasKey("22"));
  63. Assert.assertThat(userMap, Matchers.hasValue("http://blog.csdn.net/jadyer"));
  64. }
  65. }

使用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. Spark SQL Catalyst源代码分析之TreeNode Library

    /** Spark SQL源代码分析系列文章*/ 前几篇文章介绍了Spark SQL的Catalyst的核心执行流程.SqlParser,和Analyzer,本来打算直接写Optimizer的,可是发 ...

  2. 4.Swift教程翻译系列——Swift基本运算符

    英文版PDF下载地址http://download.csdn.net/detail/tsingheng/7480427 运算符是指一个特殊的符号,能够用来查看.更改值或者相加.比方说加法运算符+能够讲 ...

  3. form表单多值提交

    $.ajax({ cache: true, type: "POST", url:ajaxCallUrl, data:$('#yourformid').serialize(),// ...

  4. 链栈之C++实现

    链栈是借用单链表实现的栈.其不同于顺序栈之处在于: 1.链栈的空间是程序运行期间根据需要动态分配的,机器内存是它的上限.而顺序栈则是 静态分配内存的. 2.链栈动态分配内存的特性使得它一般无需考虑栈溢 ...

  5. Win7和VS2013上使用Intel的TBB

    源地址:http://www.th7.cn/system/win/201505/103966.shtml http://wenku.baidu.com/link?url=zH7vwmWltWF5R-9 ...

  6. Codeforces Round #235 (Div. 2) D. Roman and Numbers (数位dp、状态压缩)

    D. Roman and Numbers time limit per test 4 seconds memory limit per test 512 megabytes input standar ...

  7. POJ 1562 Oil Deposits

    转载请注明出处:http://blog.csdn.net/a1dark 大规模的图论切题之旅正式开始了.由于今天停了一天的电.所以晚上才开始切题.直到昨晚才把图论大概看了一遍.虽然网络流部分还是不怎么 ...

  8. Kali Linux 装好系统后安装经常使用软件

    1.配置软件源  leafpad /etc/apt/source.list or(recommand): #官方源 deb http://http.kali.org/kali kali main no ...

  9. Oracle中四种循环(GOTO、For、While、Loop)

    DECLARE x number; BEGIN x:=9; <<repeat_loop>> --循环点 x:=x-1; DBMS_OUTPUT.PUT_LINE(X); IF ...

  10. 字符编码详解 good

    字符编码详解 字符编码详解