1: 建议采用的文件组织结构(test在eclipse下属于source folder而不是folder)
Eclipse下浏览:src----com.test.junit3.Calculator
test----com.test.junit3.CalculatorTest
资源管理器下浏览:
2:一个简单的junit测试实例:
待测试类:
package com.test.junit3;
/**
* 数学计算
*/
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 multiply(int a, int b){
return a * b;
}
public int divide(int a, int b){
return a/b;
}
}
测试类:
package com.test.junit3;
import junit.framework.Assert;
import junit.framework.TestCase;
/**
*在junit3.8中测试类必须要继承TestCase父类
*
*单元测试不是证明您是对的,而是证明您没有错误
*/
public class CalculatorTest extends TestCase{
/**
* 在junit3.8中,测试方法满足如下原则
* 1 public的
* 2 void的
* 3 无方法参数
* 4 方法名称必须以test开头
* 5 建议方法名用test+待测试的方法名
*/
public void testAdd(){
Calculator cal = new Calculator();
int result = cal.add(1, 2);
//断言
Assert.assertEquals(3,result);
}
}
3:junit中对异常的测试实例:
待测试类:
package com.test.junit3;
public class Calculator {
public int divide(int a, int b) throws Exception{
if(0 == b){
throw new Exception("除数不能为零!");
}
return a/b;
}
}
测试类:
package com.test.junit3;
import junit.framework.Assert;
import junit.framework.TestCase;
public class CalculatorTest extends TestCase{
public void testDivide(){
Calculator cal = new Calculator();
int result = 0;
try {
result = cal.divide(6, 4);
} catch (Exception e) {
e.printStackTrace();
Assert.fail();
}
//断言
Assert.assertEquals(1, result);
}
public void testDivide2(){
Throwable t = null;
Calculator cal = new Calculator();
try {
cal.divide(4, 0); //期望抛出异常
Assert.fail(); //断言失败,如果执行此句则断言失败
} catch (Exception e) {
t = e;
}
Assert.assertNotNull(t); //断言抛出了异常
Assert.assertEquals(Exception.class, t.getClass()); //断言抛出的异常的类型
Assert.assertEquals("除数不能为零!", t.getMessage()); //断言异常的信息
}
}
4:setUp()和tear()方法的使用
待测试类:
package com.test.junit3;
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 multiply(int a, int b){
return a * b;
}
public int divide(int a, int b) throws Exception{
if(0 == b){
throw new Exception("除数不能为零!");
}
return a/b;
}
public static void main(String[] args){//在命令行方法下使用junit
junit.textui.TestRunner.run(CalculatorTest.class);
junit.swingui.TestRunner.run(Calculator.class);
junit.awtui.TestRunner.run(Calculator.class);
}
}
测试类:
package com.test.junit3;
import junit.framework.Assert;
import junit.framework.TestCase;
public class CalculatorTest extends TestCase{
/**
* setUp在每个测试方法执行之前都要执行一次
* tearDown是在每个测试方法执行之后都要执行一次
* 所有的测试方法执行之前,执行某个方法,且只执行一次,这样的方法在3.8中不存在
* 在所有的测试方法执行之后执行某个方法,且只执行一次,这样的方法在3.8中也不存在
*/
private Calculator cal;
//初始化方法
protected void setUp() {//每进一个test方法时,先执行此方法
System.out.println("****************setup");
cal = new Calculator();//每一个test方法里面的cal对象都是不同的
}
//销毁方法
protected void tearDown(){
System.out.println("****************tearDown");
}
public void testAdd(){
int result = cal.add(1, 2);
Assert.assertEquals(3,result);
}
public void testMinus(){
int result = cal.minus(1,2);
Assert.assertEquals(-1, result);
}
public void testMultiply(){
int result = cal.multiply(2, 3);
Assert.assertEquals(6, result);
}
public void testDivide(){
int result = 0;
try {
result = cal.divide(6, 4);
} catch (Exception e) {
e.printStackTrace();
Assert.fail();
}
Assert.assertEquals(1, result);
}
public void testDivide2(){
Throwable t = null;
try {
cal.divide(4, 0); //期望抛出异常
Assert.fail(); //断言失败,如果执行此句则断言失败
} catch (Exception e) {
t = e;
}
Assert.assertNotNull(t); //断言抛出了异常
Assert.assertEquals(Exception.class, t.getClass()); //断言抛出的异常的类型
Assert.assertEquals("除数不能为零!", t.getMessage()); //断言异常的信息
}
}
5:suite()方法的使用(同时执行多个单元测试)
package com.test.junit3;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
public class TestAll extends TestCase {
public static Test suite(){
TestSuite suite = new TestSuite();
suite.addTestSuite(CalculatorTest.class);
suite.addTestSuite(LargestTest.class);
return suite;
}
}