最终工程如下:
1、导入junit的jar,不建议直接使用eclipse 中提供的包 junit的jar包下载:点击打开链接 最新版本的是4.11 这里注意一个问题:如果是用4.11版本的话,同时还要下载hamcrest 1.3,下载地址->点击打开链接,使用时,要同时导入这两个包才可以!! 如果是之前版本的,只需要导入一个junit的jar包就可以了
2、在src目录下编写服务代码,这里是一个只有加减乘除功能的类
package com.fjnu.util;
public class Calculate {
public int add(int a, int b){
return a+b;
}
public int minus(int a, int b){
return a-b;
}
public int divide(int a,int b){
return a/b;
}
public int multi(int a, int b){
return a*b;
}
}
3、创建测试类 基本原则:1、在eclipse中创建一个source folder命名为test 2、创建一个测试类所在的包,包的名称和要测试的类一致
package com.fjnu.util;
import org.junit.Before;
import org.junit.Test;
// 静态导入
import static org.junit.Assert.*;
public class TestCalculate {
private Calculate cal;
// 执行任意一个方法之前都会执行setUp方法
@Before
public void setUp(){
cal = new Calculate();
}
// 加了@Test表示该方法是一个单元测试
@Test
public void testAdd(){
/*
* 以下是一个简单的断言的编写
* 第一个参数是如果出错给出的提示信息
* 第二个表示期望值,通常是用户指定的内容
* 第三个表示代码返回的实际值
*/
//Assert.assertEquals("加法有问题", 34, cal.add(12,22));
/*
* 由于包进行了静态导入之后
* Assert中的所有静态方法就不用再添加类名了
* 这样可以有效地兼容junit3
*/
assertEquals("加法有问题", 34, cal.add(12,22));
}
@Test
public void testMinus(){
int res = cal.minus(12, 2);
//Assert.assertEquals("减法有问题", 10, res);
assertEquals("减法有问题", 10, res);
}
// 表示这个测试类应该抛出ArithmeticException,如果不抛出就报错
@Test(expected=ArithmeticException.class)
public void testDivide(){
int res = cal.divide(12, 0);
assertEquals("除法有问题", 6, res);
}
// 时间单位为ms
@Test(timeout=190)
public void testTime() throws InterruptedException{
Thread.sleep(209);
int rel = cal.divide(12, 2);
}
@Test
public void testMulti(){
int res = cal.multi(12, 2);
assertEquals("乘法有问题",24,res);
}
//hamcrest 1.3
}
4、Junit3和Junit4两者之间的区别是非常明显的 在Junit3,中如果某个类需要是测试类,必须将其继承于TestCase,如果某个方法需要是测试方法,必须让这个方法通过testXXX开头,在Junit3中如果希望指定某个测试方法运行之前运行某个初始化方法,这个方法名称必须是setUp,如果希望在某个测试方法运行之后运行某个释放资源的方法,这个方法的名称必须是tearDown 在Junit4中,一个POJO类就是一个测试类,测试方法通过@Test来标识,初始化方法通过@Before,释放资源的方法通过@After来标注。但是为了让junit4中的测试类在junit3中也可以使用,习惯于把初始化方法命名为setUp,释放资源的方法命名为tearDown,测试方法也同样以test开头
5、如何使用断言 在junit4中提供了一个Assert的类,这个类中有大量的方法进行断言的处理,在junit3中由于继承了TestCase,这个TestCase中提供了大量的Assert方法。 在junit4中,为了与junit3兼容,可以静态导入包Assert,即import static org.junit.Assert.*; 这样的话使用Assert中的所有静态方法就不用再添加类名了,可以有效地兼容junit3
6、expected参数,测试异常对象: @Test(expected=ArithmeticException.class),表示检查是否抛出ArithmeticException
// 表示这个测试类应该抛出ArithmeticException,如果不抛出就报错
@Test(expected=ArithmeticException. class)
public void testDivide(){
int res = cal.divide(12, 2);
assertEquals( "除法有问题", 6, res);
}
7、timeout参数,性能测试:@Test(timeout=190),表示要在190ms内完成
// 时间单位为ms
@Test(timeout=190)
public void testTime() throws InterruptedException{
Thread. sleep(189);
int rel = cal.divide(12, 2);
}