分类: Java
2008-05-31 21:02:25
运行环境:用eclipse3.3(也不可不用),用工具只是为了方便。
junit
版本:junit 3 最新的 junit
4下载地址是:
/junit4.4.zip?modtime=1184865442&big_mirror=0 ,需将下载的JUnit
4的junit.jar文件添加到环境变量classpath中。
首先,我们写待测试的类,这里用两具类来说明,一个是ClassA,另一个是ClassB.
//ClassA代码
//编写待测试的单元ClassA
public class ClassA {
//add(double a,double b)方法返回a加b的值。
double add(double a,double b){
return a+b;
}
//subtract(double minuend,double subtrahend)方法返回minuend减去subtrahend的值。
double subtract(double minuend,double subtrahend){
return minuend-subtrahend;
}
}
//ClassB的代码,ClassB文件。
//编写待测试的单元ClassB
public class ClassB {
//add(double a,double b)方法返回a*b的值。
public double multiply(double a,double b){
return a*b;
}
//add(double a,double b)方法返回被除数/除数的值。
public double divide(double 被除数,double 除数){
return 被除数/除数;
}
}
写好待测试的类后,我们为这两个类提供的方法写TestCase,ClassATest类用于测试ClassA,ClassBTest类用于测试ClassB,代码如下:
//ClassATest类,ClassATest.java文件
//引入junit.framework.TestCase包。
import junit.framework.TestCase;
public class ClassATest extends TestCase {
//如果你用JUnit3.8.1之前的版本写测试,你需要为你写的测试类增加一个如下的构造函数,注意看在
//ClassBTest.java中就没有添加此构造函数
//public ClassBTest(String name){
// super(name);
//}
public ClassATest(String arg){
super(arg);
}
//增加testXXX()方法,此处为testAdd,用于测试ClassA类中add方法的正确性。
public void testAdd(){
ClassA a=new ClassA();
assertEquals(10,a.add(4, 6),0);
}
//增加testXXX()方法,此处为testSubtract,用于测试ClassA类中subtract方法的正确性。
public void testSubtract(){
ClassA a=new ClassA();
assertEquals(10,a.subtract(18, 8),0);
}
}
//ClassBTest类,ClassBTest.java文件
import junit.framework.TestCase;
public class ClassBTest extends TestCase {
//增加testXXX()方法,此处为testMultiply,用于测试ClassB类中multiply方法的正确性。
public void testMultiply(){
ClassB a=new ClassB();
assertEquals(24,a.multiply(4, 6),0);
}
//增加testXXX()方法,此处为testDivide,用于测试ClassA类中divide方法的正确性。
public void testDivide(){
ClassB a=new ClassB();
assertEquals(2,a.divide(18, 9),0);
}
}
测试用例写好后,就可以用测试集TestSuite来管理这些类了,以确定在执行测试的时候,执行那些测试。
//引入junit.framework.TestSuite;junit.framework.Test;
import junit.framework.TestSuite;
import junit.framework.Test;
public class SuiteTestAll {
public static Test suite(){
//创建一个TestSuite对象
TestSuite suite=new TestSuite();
//用addTestSuite方法将要测试的TestCase添加到测试集里,并返回一个Test类型
suite.addTestSuite(ClassATest.class);
suite.addTestSuite(ClassBTest.class);
return suite;
}
public static void main(String arg[]){
junit.textui.TestRunner.run(SuiteTestAll.suite());
//还可以有以下的几种执行测试的方法。
//junit.swingui.TestRunner.run(SuiteTestAll.class);
//junit.awtui.TestRunner.run(SuiteTestAll.class);
}
}
然后编译执行SuiteTestAll.java就可以了。
用测试集的目的是对TestCase进行管理,对于一个TestCase也可以执行测试。
如可将ClassATest改为:
import junit.framework.TestCase;
public class ClassATest extends TestCase {
public ClassATest(String arg){
super(arg);
}
//增加testXXX()方法,此处为testAdd,用于测试ClassA类中add方法的正确性。
public void testAdd(){
ClassA a=new ClassA();
assertEquals(10,a.add(4, 6),0);
}
//增加testXXX()方法,此处为testSubtract,用于测试ClassA类中subtract方法的正确性。
public void testSubtract(){
ClassA a=new ClassA();
assertEquals(10,a.subtract(18, 8),0);
}
public static void main(String arg[]){
junit.textui.TestRunner.run(ClassATest.class);
}
}
然后编译运行ClassATest.java可以,只是这样执行的测试只是对ClassA单元进行了测试。若要测试不能类中的方法也可以,只要在TestCase中写入针对不同类的testXXX()就可以了。
如下面的TestCase对ClassA中的add()及ClassB中的multiply()方法进行测试,而没有对这两个类中的所有方法进行测试。
//PartTest.java文件
//只对ClassA中的add()及ClassB中的multiply()方法进行测试,而没有对这两个类中的所有方法进行测试。
import junit.framework.TestCase;
public class PartTest extends TestCase{
public void testAdd(){
ClassA ad=new ClassA();
assertEquals(30,ad.add(10, 20),0);
}
public void testMultiply(){
ClassB ad=new ClassB();
assertEquals(200,ad.multiply(10, 20),0);
}
// public static void main(String arg[]){
// junit.textui.TestRunner.run(PartTest.class);
// }
}
总结:使用junit做测试的基本步骤是先写TestCase,然后在用 TestSuite(测试集)去管理和运行这些测试,上面的例子中,对于未用TestSuite就直接运行TestCase的情况下,实际是junit在 在运行TestCase时自动创建了一个TestSuite,有点像你写一个类,而不有显示的去写其构造器时,java会默认将“类名()”做为其构造器 来。