1. hamcrest

hamcrest可以有效增加junit的测试能力,用一些对通俗语言来进行测试.
Hamcrest 是一个测试的框架,它提供了一套通用的匹配符 Matcher,灵活使用这些匹配符定义的规则,程序员可以更加精确的表达自己的测试思想,指定所想设定的测试条件。比如,有时候定义的测试数据范围太精 确,往往是若干个固定的确定值,这时会导致测试非常脆弱,因为接下来的测试数据只要稍稍有变化,就可能导致测试失败(比如 assertEquals( x, 10 ); 只能判断 x 是否等于 10,如果 x 不等于 10, 测试失败);有时候指定的测试数据范围又不够太精确,这时有可能会造成某些本该会导致测试不通过的数据,仍然会通过接下来的测试,这样就会降低测试的价 值。 Hamcrest 的出现,给程序员编写测试用例提供了一套规则和方法,使用其可以更加精确的表达程序员所期望的测试的行为。

hamcrest常用的匹配器:
  • 核心

    • anything - 总是匹配,如果你不关心测试下的对象是什么是有用的
    • describedAs - 添加一个定制的失败表述装饰器
    • is - 改进可读性装饰器 - 见下 “Sugar”
  • 逻辑
    • allOf - 如果所有匹配器都匹配才匹配, short circuits (很难懂的一个词,意译是短路,感觉不对,就没有翻译)(像 Java &&)
    • anyOf - 如果任何匹配器匹配就匹配, short circuits (像 Java ||)
    • not - 如果包装的匹配器不匹配器时匹配,反之亦然
  • 对象
    • equalTo - 测试对象相等使用Object.equals方法
    • hasToString - 测试Object.toString方法
    • instanceOf, isCompatibleType - 测试类型
    • notNullValue, nullValue - 测试null
    • sameInstance - 测试对象实例
  • Beans
    • hasProperty - 测试JavaBeans属性
  • 集合
    • array - 测试一个数组元素test an array’s elements against an array of matchers
    • hasEntry, hasKey, hasValue - 测试一个Map包含一个实体,键或者值
    • hasItem, hasItems - 测试一个集合包含一个元素
    • hasItemInArray - 测试一个数组包含一个元素
  • 数字
    • closeTo - 测试浮点值接近给定的值
    • greaterThan, greaterThanOrEqualTo, lessThan, lessThanOrEqualTo - 测试次序
  • 文本
    • equalToIgnoringCase - 测试字符串相等忽略大小写
    • equalToIgnoringWhiteSpace - 测试字符串忽略空白
    • containsString, endsWith, startsWith - 测试字符串匹配


1.  要用junit中的assertThat来进行断言,记住静态导入
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;
2. 测试实例:
 	@Test
public void testHamcrest(){
// 比较50是否和50相等
assertThat(50, equalTo(50));
// 50是否大于30并且小于60
assertThat("错误",50, allOf(greaterThan(30), lessThan(60)));
// 判断字符串是否以.txt结尾
assertThat("错误", "abc.txt", endsWith(".txt")); }



特别注意,如果使用junit4.10, 必须把hamcrest的jar包移到junit的jar包之前,否则组合条件allOf会抛出异常



2. TestSuit

如果有多个测试操作类,那么一个一个来运行测试就很不方便,所以通过testsuit可以把多个测试类“捆绑”起来,一起测试!
例如,下面这个工程有三个测试类,TestA, TestB和TestCalculate
我们可以再建一个类TestSuit,把这些类进行打包,然后同时运行测试。
package com.fjnu.util;

import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses; // RunWith表示这个类是一个suite的类
@RunWith(Suite.class)
// 说明这个类中包含哪些测试组建
@SuiteClasses({TestA.class,
TestB.class,
TestCalculate.class})
public class TestSuit {
/*
* 测试原则:
* 1、建议创建一个专门的source folder--->test来编写测试类代码
* 2、测试类的包应该保持和需要测试的类一致
* 3、测试单元中的每个测试方法都必须可以独立执行,没有次序,不能有任何互相依赖
*/ }

然后直接运行TestSuit这个类就可以测试所选的测试类了。






junit学习笔记(二):hamcrest和TestSuit的更多相关文章

  1. JDBC学习笔记二

    JDBC学习笔记二 4.execute()方法执行SQL语句 execute几乎可以执行任何SQL语句,当execute执行过SQL语句之后会返回一个布尔类型的值,代表是否返回了ResultSet对象 ...

  2. WPF的Binding学习笔记(二)

    原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...

  3. AJax 学习笔记二(onreadystatechange的作用)

    AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...

  4. [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计

    源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...

  5. JMX学习笔记(二)-Notification

    Notification通知,也可理解为消息,有通知,必然有发送通知的广播,JMX这里采用了一种订阅的方式,类似于观察者模式,注册一个观察者到广播里,当有通知时,广播通过调用观察者,逐一通知. 这里写 ...

  6. java之jvm学习笔记二(类装载器的体系结构)

    java的class只在需要的时候才内转载入内存,并由java虚拟机的执行引擎来执行,而执行引擎从总的来说主要的执行方式分为四种, 第一种,一次性解释代码,也就是当字节码转载到内存后,每次需要都会重新 ...

  7. Java IO学习笔记二

    Java IO学习笔记二 流的概念 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入输 ...

  8. 《SQL必知必会》学习笔记二)

    <SQL必知必会>学习笔记(二) 咱们接着上一篇的内容继续.这一篇主要回顾子查询,联合查询,复制表这三类内容. 上一部分基本上都是简单的Select查询,即从单个数据库表中检索数据的单条语 ...

  9. NumPy学习笔记 二

    NumPy学习笔记 二 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...

  10. Learning ROS for Robotics Programming Second Edition学习笔记(二) indigo tools

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...

随机推荐

  1. Scala学习之延迟绑定

    package com.swust.example object TraitDemo2 extends App{ //抽象类 abstract class Writer { def writeMess ...

  2. font awesome使用笔记

    背景 今天将BS项目部署到IIS服务器上时.首次打开一个使用font awesome图标集的页面是加载非常慢. 于是果断按下F12查看具体页面的请求时常.除去其他异步数据的加载消耗时间以外.我居然看到 ...

  3. 算法学习笔记(LeetCode OJ)

    ================================== LeetCode的一些算法题,都是自己做的,欢迎提出改进~~ LeetCode:http://oj.leetcode.com == ...

  4. FileNameExtensionFilter文件过滤

    package com.soft.test; import javax.swing.*; import javax.swing.filechooser.*; import java.awt.event ...

  5. VS插件

    VS插件 背景 前些天去考科目二,感觉经历了一场不是高考却胜似高考的考试(10年前的5分之差, 还是难以释怀)!    一行八人,就我学的时间最少(4天,8人一辆车),教练都觉得我肯定还得再来一次! ...

  6. MySQL show binglog event in 'log_name'

    二进制日志文件记录的内容:记录表的更改. 二进制日志文件记录的形式:基于语句的复制.基于行的复制. 两种记录形式的优点与不足: 基于语句的复制-->它不能保证复制的正确性.如随机函数可能在两台机 ...

  7. PCB外形加工培训教材

    一.目录1.外形加工制程介绍2.外形加工机器介绍3.各制程流程介绍3.1锣板制程3.2V-Cut3.3啤板3.4斜边3.5洗板4.环保5.工业安全 1.0 外形加工制程介绍 外形加工包括: 1.1锣板 ...

  8. Windows 8.1 正式版微软官方原版镜像下载(新增10/17新版下载)

    中文版:中国区OEM预装版本,特定国家版,锁定语言,其它功能和核心版没有区别.简体中文单语言版:锁定语言,其它功能和核心版没有区别.专业版+核心版[零售版][推荐]:镜像内包含专业版(Professi ...

  9. linux c in common use function reference manual

    End User License Agreement guarantees or warranties,大战前得磨刀!!!!! Tips:C Funcs Chk header Modules!

  10. JWPlayer 使用小记

    最后的效果 1.从官网下载JWPlayer 下载后的文件,标红部分是必要的文件. 2.Jquery可以使用1.6以上版本 <html><head> <title>G ...