在咱们Java软件开发过程当中,相应的测试也在有序穿插的进行着;在软件公司中称之为单元测试,单元测试,顾名思义:就是对一个个小的独立的功能模块进行测试,咱们经常使用的单元测试工具备不少种,今天咱们就来介绍一下你们最经常使用的JUNIT单元测试工具。
junit单元测试工具主要的版本是:3.x 和 4.x ;你们如今经常使用的应该都是4.x版本,那么junit3.x 与 4.x有什么区别呢?junit4.x又有哪些好用的快捷的功能呢?
一、junit3.x版本,咱们一般使用junit 3.8
(1)、使用junit3.x版本进行单元测试时,测试类必需要继承于TestCase父类;
(2)、测试方法须要遵循的原则:
A、public的
B、void的
C、无方法参数
D、方法名称必须以test开头
(3)、不一样的Test Case之间必定要保持彻底的独立性,不能有任何的关联。
(4)、咱们要掌握好测试方法的顺序,不能依赖于测试方法本身的执行顺序。
dome: html
public class TestMyNumber extends TestCase {
private MyNumber myNumber;
public TestMyNumber(String name) {
super(name);
}
// 在每一个测试方法执行 [以前] 都会被调用
@Override
public void setUp() throws Exception {
// System.out.println("欢迎使用Junit进行单元测试…");
myNumber = new MyNumber();
}
// 在每一个测试方法执行 [以后] 都会被调用
@Override
public void tearDown() throws Exception {
// System.out.println("Junit单元测试结束…");
}
public void testDivideByZero() {
Throwable te = null;
try {
myNumber.divide(6, 0);
Assert.fail("测试失败");
} catch (Exception e) {
e.printStackTrace();
te = e;
}
Assert.assertEquals(Exception.class, te.getClass());
Assert.assertEquals("除数不能为 0 ", te.getMessage());
}
} dom
二、junit4.x版本
(1)、使用junit4.x版本进行单元测试时,不用测试类继承TestCase父类,由于,junit4.x全面引入了Annotation来执行咱们编写的测试。
(2)、junit4.x版本,引用了注解的方式,进行单元测试;
(3)、junit4.x版本咱们经常使用的注解:
A、@Before 注解:与junit3.x中的setUp()方法功能同样,在每一个测试方法以前执行;
B、@After 注解:与junit3.x中的tearDown()方法功能同样,在每一个测试方法以后执行;
C、@BeforeClass 注解:在全部方法执行以前执行;
D、@AfterClass 注解:在全部方法执行以后执行;
E、@Test(timeout = xxx) 注解:设置当前测试方法在必定时间内运行完,不然返回错误;
F、@Test(expected = Exception.class) 注解:设置被测试的方法是否有异常抛出。抛出异常类型为:Exception.class;
G、@Ignore 注解:注释掉一个测试方法或一个类,被注释的方法或类,不会被执行。
dome: ide
package com.an.junit;
import static org.junit.Assert.*;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
public class TestMyNumber {
private MyNumber myNumber;
@BeforeClass
// 在全部方法执行以前执行
public static void globalInit() {
System.out.println("init all method...\r\n");
}
@AfterClass
// 在全部方法执行以后执行
public static void globalDestory() {
System.out.println("destory all method...");
}
@Before
// 在每一个测试方法以前执行
public void setUp() {
System.out.println("start setUp method");
myNumber = new MyNumber();
}
@After
// 在每一个测试方法以后执行
public void tearDown() {
System.out.println("end tearDown method\r\n");
}
@Test(timeout=600)// 设置限定测试方法的运行时间 若是超出则返回错误
public void testAdd() {
System.out.println("testAdd method");
int result = myNumber.add(2, 3);
assertEquals(5, result);
}
@Test
public void testSubtract() {
System.out.println("testSubtract method");
int result = myNumber.subtract(1, 2);
assertEquals(-1, result);
}
@Test
public void testMultiply() {
System.out.println("testMultiply method");
int result = myNumber.multiply(2, 3);
assertEquals(6, result);
}
@Test
public void testDivide() {
System.out.println("testDivide method");
int result = 0;
try {
result = myNumber.divide(6, 2);
} catch (Exception e) {
fail();
}
assertEquals(3, result);
}
@Test(expected = Exception.class)
public void testDivide2() throws Exception {
System.out.println("testDivide2 method");
myNumber.divide(6, 0);
fail("test Error");
}
public static void main(String[] args) {
}
} 工具
总 结:在单元测试中,测试用例的编写是很重要的,只有一个好的测试用例,才能检测出软件代码的健壮性,才能提升最后开发出软件的成功率;你们必定要明白一 点,咱们进行单元测试,不是为了证实您是对的,而是为了证实您没有错误;只有这样咱们的测试才有意义;还有一点就是,在咱们进行单元测试以后必定要保证代 码的状态和进行单元测试以前是一致的;不能由于进行了单元测试,就要把原来的代码状态打乱,这样是不合理的,也是不符合逻辑的。咱们不能只懂软件开发,也 要懂得如何更好的去找出你所开发的软件中存在的问题,只有这样,才能算是一位合格的软件开发工程师。 post
转载自安安DIY创做室 http://www.vscsoft.com/
本文连接:http://www.vscsoft.com/post/65.html 单元测试