junit学习笔记(二):hamcrest和TestSuit
来源:互联网 发布:网络商品直销流程 编辑:程序博客网 时间:2024/06/05 19:29
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并且小于60assertThat("错误",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
- Junit学习笔记之二:hamcrest简介和TestSuite
- hamcrest和TestSuit
- 学习junit和hamcrest的使用
- 解决“java.lang.NoSuchMethodError: org.hamcrest.core.AllOf.allOf…”问题(使用JUnit和Hamcrest)
- Junit学习笔记(二)
- Junit 4 TestSuit
- junit--hamcrest
- JUnit和hamcrest的jar包关系
- 使用Junit和hamcrest包进行单元测试
- JUnit学习笔记(二):源码
- Junit单元测试学习笔记二
- JUnit4.11和hamcrest-core-1.3 搭建自己的测试环境(非eclipse内置Junit)
- JUnit学习之hamcrest、testSuite介绍及测试原则
- JUnit: Hamcrest 使用
- JUnit: Hamcrest使用
- junit测试hamcrest断言
- JUnit 4 with Hamcrest
- Ajax(1):get请求
- img底部总是有空白
- cannot find crt1.o:错误解决方案
- oracle 自动增长数列
- Sicily 1193 Up the Stairs
- junit学习笔记(二):hamcrest和TestSuit
- VC6代码移植到高版本VC时候的常见问题
- 实现背景图自适应效果的jQuery插件
- Expression parameters.parseContent is undefined on line 45, column 28 in template/ajax/head.ftl. - C
- package、import 、 jar
- Ajax(2):post请求
- Silent Code 黑客及其它
- 北京设计模式学习组BJDP第4次活动(2013.06.16)回顾会纪要
- Eclipse开发经典教程之常用SWT组件