Junit单元测试,即所谓的白盒测试,是为了测试代码的健壮性。在编写单元测试的时候需要注意几点,
1,将测试代码与源代码分离,新建的项目有一个默认的src源代码包,这时,我们在新建一个源代码包,在项目上右键→new→source folder,,
2,目标类与测试类应该位于同一个包下面,这样测试类中就不必导入源代码所在包,因为他们位于同一个包下面(目标类放在src的这个source folder下面的某个包下,而测试类应该放在新建的那个source folder比如取名test的某个包下,而这两个报名必须一样)。
3,测试类的命名规则,例如,目标类为Calculator,那么测试类就应该命名为TestCalculator或者CalculatorTest,其他测试类采用一致的命名规则即可。
4,单元测试主要是用来判断程序的执行结果与自己期望的结果是否一致。
5,测试类必须要继承于TestCase父类。
6,在Junit3.8中,测试方法需要满足如下规则:
(1),方法必须为public的。
(2),返回类型必须为void的。
(3),无方法参数。
(4),方法名称必须以test开头
7,所有测试方法之间必须保持独立性,不能有依赖关系。
在Eclipse或者MyEclipse增加Junit支持(以MyEclipse-8.6为例):
新建一个java project,然后在项目上点右键→Build path→Add libraries→JUnit→Next→JUnit3或者Junit4即可。
目标类(位于src这个默认source folder下):
package com.tang.mogu;
public class Calculator
{
public long add(int a, int b)
{
return a + b;
}
public int subtract(int a, int b)
{
return a - b;
}
public long multiply(int a, int b)
{
return a * b;
}
public double divide(int a, int b) throws Exception
{
if(0 == b)
{
throw new Exception("除数不能为零");
}
return a / b;
}
//原始测试方式
// public static void main(String[] args)
// {
// Calculator calc = new Calculator();
//
// long a = calc.add(1, 2);
// System.out.println(a);
//
// int b = calc.subtract(1, 2);
// System.out.println(b);
//
// long c = calc.multiply(1, 2);
// System.out.println(c);
//
// double d = calc.divide(1, 2);
// System.out.println(d);
// }
}
测试类(位于自己新建的source folder下):
package com.tang.mogu;
import junit.framework.Assert;
import junit.framework.TestCase;
/**
* 测试类必须继承TestCase类
*
* 在junit3.8当中,应当注意:
* 1,方法必须为public的
* 2,必须为void(不应该有返回值)
* 3,无方法参数
* 4,方法名称必须以test开头
* 5,测试与测试之间完全独立,不能有依赖关系(每个测试方法完全独立testA不能依赖testB)
*/
public class CalculatorTest extends TestCase
{
private Calculator calc;
public void setUp() throws Exception
{
calc = new Calculator();
};
public void tearDown() throws Exception
{
};
public void testAdd()
{
long result = calc.add(1, 2);
Assert.assertEquals(3, result);
}
public void testSubtract()
{
int result = calc.subtract(1, 2);
Assert.assertEquals(-1, result);
}
public void testMultiply()
{
long result = calc.multiply(1, 2);
Assert.assertEquals(2, result);
}
public void testDivide()
{
double result = 0.0;
try
{
result = calc.divide(1, 2);
}
catch (Exception e)
{
e.printStackTrace();
Assert.fail();//程序执行到此行,说明有异常,测试不通过
}
Assert.assertEquals(0.0, result);
}
public void testDivideByZero()
{
Throwable tx = null;
try
{
calc.divide(1, 0);
Assert.fail();
}
catch(Exception ex)
{
tx = ex;
}
Assert.assertEquals(Exception.class, tx.getClass());
Assert.assertEquals("除数不能为零", tx.getMessage());
}
public static void main(String[] args)
{
//textui以文本命令行执行,显示错误(成功)信息
junit.textui.TestRunner.run(CalculatorTest.class);
//awtui,以图形界面方式,显示错误(成功)信息
junit.awtui.TestRunner.run(CalculatorTest.class);
}
}
由于测试类继承了TestCase类,所以在该测试类上点击右键→Run As→JUnit Test即可(如果没有继承TestCase类Run As是没有Junit Test选项的,只有main方法的Java Application选项)。