开发过程中,单元测试对于软件质量有着重大的影响,而且对于集成测试来说,经过完整单元测试的代码可以大大减少集成测试的工作量。
JUnit是一个Java语言的单元测试框架,JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework), JUnit有它自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。Junit是一套框架,继承TestCase类,就可以用Junit进行自动测试了。Junit 目前主要是Junit4,本次实践都使用junit4
一、目标
了解Junit测试包如何使用
对于junit中的一些基本annotation进行验证
二、实践步骤
1、创建一个java工程,生成一个类,取名为Calc。 Calc里面主要有2个方法,分别是计算 “加法”,“除法”。
package com.study.junit;
public class Calc {
int add(int x, int y){
return x+y;
}
int divide(int x, int y){
return x/y;
}
}
2、在工程上,右键new-》Junit Test Case 选中
在弹出的菜单中,填入测试类名称( 一般用 被测对象类名+Test 作为测试类名),配置好被测对象类名,举例如下
3、编写测试方法
package com.study.junit;
import static org.junit.Assert.*;
import static org.hamcrest.Matchers.*;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
public class CalcTest {
@Test
public void testAdd() {
int z = new Calc().add(10, 20);
assertEquals(30, z);
assertThat("hello", z, is(30));
assertThat("range",z, allOf( lessThan(40),greaterThan(20)));
System.out.println("after run");
}
@Test(timeout=100)
//打上@Test 标记,才会认为是要进行测试的对象,否则不测试
//在()中填入 抛出异常内容,也可以测试是否抛出
// timeout=100, 表示期望下午方法在100毫秒内结束
public void testDivide(){
for(int j=0; j<1000; j++){
int z= new Calc().divide(8, 2);
}
//assertThat("divide", z , is (4));
System.out.println("run");
}
}
测试类里面, 要测试的方法,需要打上@Test 标志,如果没有打上的,不会被作为测试项执行。@Test(timeout=100) 表示这个测试期望在100毫秒内执行完毕,否则算测试不通过。
4、运行测试
在测试类上,右键-》run as ->Junit Test
就可以进行单元测试了。测试信息如下:
Runs 这里体现了执行了多少个测试, 也就是打上@Test 标记的测试项。 Error 表示 执行测试项目中出错了,表示编写的测试类运行中出现故障。 Failure 表示测试类正常运行完成后,有多少测试项目与预期不同。
assertThat("hello", z, is(30));
assertEquals(30, z);
5、 几个annotation说明
@Test //表明这是一个测试项目
@Ignore //暂时忽略掉,当测试条件不具备的时候,可以使用这个标识
@After //在每一个方法之后执行
@Before //在每一个方法之间执行
@AfterClass //在全部执行之后执行一次 必须是static 当需要提供公共资源的时候
@BeforeClass //在全部执行之前执行一次 必须是static 需要进行资源释放的时候
@AfterClass和@BeforeClass 的使用场景:比如测试很多项目,在测试开始之前,我们需要建立数据库连接,并且获取数据库操作的seesion,
而在全部的操作结束后,我们要释放数据库seesion。 需要注意的是这两个必须要用static方法。
6、多个类的测试用例如何一起测试
一般情况下,我们会有很多类需要测试,而且希望一次性都测试一遍,这个时候可以这样操作: 工程上右键-》run as
进入运行配置界面
这样可以把需要测试的项目都一起进行运行测试。
三、小结
Junit 是单元测试的最流行工具,提供了比较丰富的执行测试调度的方式。对于junit4测试,如果使用assertThat 方式,需要引入下面的jar包,最好连junit包,也使用自己的。Junit的jar包,如下: