如果写了一个类,想测试一下有没有bug,可以用main方法去测试。但是main方法缺点很多,不是理想的做单元测试的途径——方法不能一起运行,且测试结果多数要通过程序员自己观察才可以判定。
为了克服这些缺点,使单元测试更加简单方便,Junit是一个很好的选择。接下来,将会讲解下Junit4的使用。
要使用Junit4非常的简单,准备工作也非常方便。以Junit4.8.1为例,只需要添加junit-4.8.1.jar就可以使用junit的所有传统方法。
以下是一个小例子:
待测试类T
package com.ellis.junit4;
public class T {
public int add(int x, int y){
return x+y;
}
}
junit4测试类TTest:
package com.ellis.junit4.test;
import static org.junit.Assert.*;
import org.junit.Test;
import com.ellis.junit4.T;
public class TTest {
@Test
public void testAdd() {
int z = new T().add(5, 3);
assertEquals("z != 8", z, 8);
}
}
TTest.class里的testAdd方法用来测试T.class里的add方法。@Test代表这个方法为测试方法。如果有多个方法用@Test注释的话,那么多个方法中的每个方法都可以单独运行(运行一个方法的时候,不运行其它方法),这是用main方法测试所无法比拟的。运行单个@Test方法的操作是:选中该方法名,然后点run。
TTest.class里的assertEquals()就是Junit的断言方法之一,它的作用是判断z的值是否为8,如果z不等于8的话junit将会报错,"z !=8"是自己写的用于与该错误提示一起提示出来字符串,使错误原因更加直观。assert*()方法有很多,它们都是org.junit.Assert的静态方法,若要像TTest.class里那样使用,需要进行静态引入:import static org.junit.Assert.*。
传统的,也就是Junit3及其之前的assert*()方法有很多,在这里就不一一介绍。这里主要介绍一下Junit4里新增加的hamcrest断言assertThat()。
若要使用hamcrest的断言,还必须添加hamcrest-core-1.2.jar和hamcrest-library-1.2.jar这个两个jar包。
assertThat()有什么作用?使用assertThat()有什么好处呢?assertThat()比起传统的assert*()断言,在功能上并没有多大的不同,它最主要的优点是在于——1.它的语法更接近于口语,从而使代码写和看起来更加直观;2.一个assertThat()可以实现绝大部分常用的传统assert*()方法的功能。下面以用assertThat()代替assertEquals()为例,讲解一下assertThat()。
用assertThat()的TTest:
package com.ellis.junit4.test;
import static org.junit.Assert.*;
import static org.hamcrest.Matchers.*;
import org.junit.Test;
import com.ellis.junit4.T;
public class TTest {
@Test
public void testAdd() {
int z = new T().add(5, 3);
assertThat(z, is(8));
assertThat("wrong", z, allOf(greaterThan(5), lessThan(10)));
assertEquals("z != 8", z, 8);
}
}
如上面代码所示assertThat(z, is(8))的作用是判断z的值是否为8(z is 8 or not ?),它的作用和assertEquals(z, 8)完全一样。is()其实是org.hamcrest.Matchers的静态方法,若要如此使用必须先进行静态引入import static org.hamcrest.Matchers.*。
上面代码中的assertThat(z, allof(greaterThan(5), lessThan(10)))的作用是判断z是否都allof()里面的条件,allof()里的条件是大于5(greaterThan(5))、小于3(lessThan(10))。
assertThat()常用的方法还有:
a)
assertThat( n, allOf( greaterThan(1), lessThan(15) ) ); n满足allof()里的所有条件
assertThat( n, anyOf( greaterThan(16), lessThan(8) ) );n满足anyOf()里的任意条件
assertThat( n, anything() ); n是任意值(任意值都可以通过测试)
assertThat( str, is( "ellis" ) ); str是is()里的内容
assertThat( str, not( "ellis" ) ); str不是not()里的内容
b)
assertThat( str, containsString( "ellis" ) ); str包含containsString()里的内容
assertThat( str, endsWith("ellis" ) ); str以endsWith()里的内容结尾
assertThat( str, startsWith( "ellis" ) ); str以startsWith()里的内容开始
assertThat( n, equalTo( nExpected ) ); n与equalTo()里的内容相等
assertThat( str, equalToIgnoringCase( "ellis" ) ); str忽略大小写后与equalToIgnoringCase()里的内容相等
assertThat( str, equalToIgnoringWhiteSpace( "ellis" ) );str忽略空格后与equalToIgnoringWhiteSpace()里的内容相等
c)
assertThat( d, closeTo( 3.0, 0.3 ) );d接近于3.0,误差不超过0.3
assertThat( d, greaterThan(3.0) );d大于3.0
assertThat( d, lessThan (10.0) );d小于10.0
assertThat( d, greaterThanOrEqualTo (5.0) );d大于或等于5.0
assertThat( d, lessThanOrEqualTo (16.0) );d小于或等于16.0
d)
assertThat( map, hasEntry( "ellis", "ellis" ) );map里有一个名为ellis的key,其值为ellis
assertThat( iterable, hasItem ( "ellis" ) );iterable(例如List)里包含值ellis
assertThat( map, hasKey ( "ellis" ) );map有一个名为ellis的key
assertThat( map, hasValue ( "ellis" ) );map里包含一个值ellis
另外,还有如下这些常用注解,使测试起来更加方便:
1. @Ignore: 被忽略的测试方法
2. @Before: 每一个测试方法之前运行
3. @After: 每一个测试方法之后运行
4. @BeforeClass: 所有测试开始之前运行
5. @AfterClass: 所有测试结束之后运行
分享到:
相关推荐
JUnit4概述,在Eclipse中使用JUnit4进行单元测试(初级篇、中级篇、高级篇)
eclipse上通过一个简单例子演示使用JUnit4进行测试
针对Calculate类 (含加减乘除4个方法),使用junit4进行简单的单元测试例子,含注释~
详细的介绍了junit单元测试的过程,JUnit 是 Java 社区中知名度最高的单元测试工具,本文中所介绍的是最新的JUnit 4单元测试,JUnit 4 使用 Java 5 中的注解(annotation)使测试变得更加简单
Junit的简单使用,Junit的简单使用
它大大简化了开发人员执行单元测试的难度,特别是 JUnit 4 使用 Java 5 中的注解(annotation)使测试变得更加简单。 在单元测试前首先规划单元测试代码应放在什么地方。把它和被测试代码混在一起,这显然会照成混乱...
单元测试工具Junit的简单使用
使用eclipse与Junit4进行单元测试的简单例子
Junit简单使用说明 附带PPT 使用说明比较详细
JUNIT 4.X4.X4.X使用 .... .... .... ......... 12 下载与安装 下载与安装 .... .... .... ...... 12 使用方法 .... .... .... .......... 13 与 3.x版本的异同 (看谁更简单) (看谁更简单) .... .... .... 13...
介绍如何利用反射和注解去简单的模拟JUnit4单元测试的使用,之所以选择JUnit4是因为4.0以后最大的改进就是使用了注解。需要注意的是这里并不是完全的模拟,只是简单实现了一下Runner类和JUnit注解相关的工作流程。...
首先新建一个项目叫JUnit_Test,我们编写一个Calculator类,这是一个能够简单实现加减乘除、平方、开方的计算器类,然后对这些功能进行单元测试。这个类并不是很完美,我们故意保留了一些Bug用于演示,这些Bug在注释...
简单的介绍关于junit软件测试工具的介绍和使用
我自己粗略的写了一下JUnit和android里面对JUnit的应用,因为没有太多时间整理,所以很粗略,等有时间再好好整理一下,见笑了。
Junit4练习:使用JUnit4测试进行简单练习
简单介绍了Junit的安装过程与实例应用。应用的问题是软件测试中的佣兵问题,整个文档中有代码及测试结果,可以更好地帮助学生了解Junit单元测试中的作用。
JUnit 是Java语言事实上的标准单元测试库。JUnit的易用性无疑是它受欢迎的主要原因。也许你会这样想:它做的事情不多,仅仅是做一些测试然后报告结果,JUnit应该是很简单的。
以一个简单的DEMO介绍如何在Eclipse下使用JUnit4。供初次接触JUnit的同学学习
一共7页的word文档,详细讲解JUnit最简单的试用方法,我也正在看。2009.11.24
我们曾经和大家探讨过全面剖析JavaME单元测试理念,其实在Android上实现JUnit单元测试也不是很困难,主要是在配置文件和测试环境上将花费很长时间,下面从四步简单讲一下在Android上实 我们曾经和大家探讨过全面...