Chinaunix首页 | 论坛 | 博客
  • 博客访问: 192372
  • 博文数量: 32
  • 博客积分: 2000
  • 博客等级: 大尉
  • 技术积分: 280
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-29 18:05
文章分类

全部博文(32)

文章存档

2011年(1)

2008年(31)

我的朋友

分类: 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会默认将“类名()”做为其构造器 来。

 

阅读(5005) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~