一、简介
JUnit是一个开源的java单元测试框架。
1) 提供的API可以让你写出测试结果明确的可重用单元测试用例
2) 提供了三种方式来显示你的测试结果,而且还可以扩展
3) 提供了单元测试用例成批运行的功能
4) 超轻量级而且使用简单,没有商业性的欺骗和无用的向导
5) 整个框架设计良好,易扩展
二、入门
下面是利用JUnit进行单元测试的步骤:
1.创建一个Java项目,命名为JUnitTest。
2.右击该java项目,选择Properties,点击Java Build Path->Add Library->JUnit.->JUnit 4.
这样Junit 就被加入到项目中,如下:
3.创建一个Calculator 类,代码如下:
package com.demo;
public class Calculator {
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 mul(int a,int b){
return a*b;
}
}
4.创建一个JUnit Test Case ,设置如下:
5.点击Next,
6.系统会自动生成一个TestCalculator 类,只需要稍微修改其中一些代码即可。测试代码如下:
package com.demo;
import static org.junit.Assert.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.demo.Calculator;
public class TestCalculator {
Calculator calculator;
@Before
public void setUp() throws Exception {
calculator=new Calculator();
}
@After
public void tearDown() throws Exception {
}
@Test
public void testAdd() {
int rel=calculator.add(12, 22);
assertEquals("加法有问题",rel,34);
}
@Test
public void testMinus() {
int rel=calculator.minus(24, 12);
assertEquals("减法有问题",rel,12);
}
@Test
public void testDivide() {
int rel=calculator.divide(24, 12);
assertEquals("除法有问题",rel,2);
}
@Test
public void testMul() {
int rel=calculator.mul(2, 12);
assertEquals("乘法有问题",rel,24);
}
}
7.在TestCalculator右击,选中Run As->JUnit Test8.运行结果如下:
三、测试代码的放置
三种放置方式:
1、同一目录——针对小型项目
假设有一个项目类,名字为
com.test.business.Account
相应的测试位于
com.test.business.TestAccount
即物理上存在于同一目录
优点是TestAccount能够访问Account的protected成员变量和函数
缺点是测试代码到处都是,且堆积在产品代码的目录中 2、子目录
这个方案是在产品代码的目录之下创建一个test子目录
同上,假设有一个项目类,名字为
com.test.business.Account
相应的测试位于
com.test.business.test.TestAccount
优点是能把测试代码放远一点,但又不置于太远
缺点是测试代码在不同的包中,所以测试类无法访问产品代码中的protected成员,解决的办法是写一个产品代码的子类来暴露那些成员。然后在测试代码中使用子类。
举一个例子,假设要测试的类是这样的:
package com.test.business;
public class Pool{
protected Date lastCleaned;
....
}
为了测试中获得non-public数据,我们需要写一个子类来暴露它
package com.test.business.test;
import com.test.business.Pool;
public class PoolForTesting extends Pool{
public Date getLastCleaned(){
return lastCleaned;
}
....
}