3.6、JUnit一个实例 
在控制台中简单的范例如下: 
1、写个待测试的Triangle类,创建一个TestCase的子类ExampleTest: 
2、 ExampleTest中写一个或多个测试方法,断言期望的结果(注意:以test作为待测试的方法的开头,这样这些方法可以被自动找到并被测试) 
3、 ExampleTest中写一个suite()方法,它会使用反射动态的创建一个包含所有的testXxxx方法的测试套件: 
4、 ExampleTest可以写setUp()、tearDown()方法,以便于在测试时初始化或销毁测试所需的所有变量和实例。(不是必须的) 
5、写一个main()方法以文本运行器或其它GUI的方式方便的运行测试 
6、编译ExampleTest,执行测试。 
3.7、Eclipse中JUnit的使用 
Eclipse自带了一个JUnit的插件,不用安装就可以在你的项目中开始测试相关的类,并且可以调试你的测试用例和被测试类。 
使用步骤如下: 
1、新建一个测试用例,点击“File->New->Other…菜单项,在弹出的“New”对话框中选择”Java->JUnit”,下的TestCase 或TestSuite,就进入“New JUnit TestCase”对话框 
2、在“New JUnit TestCase”对话框填写相应的栏目,主要有Name(测试用例名),SuperClass(测试的超类一般是默认的junit.framework.TestCase),Class Under Test(被测试的类),Source Folder(测试用例保存的目录),Package(测试用例包名),及是否自动生成main,setUp,tearDown方法。 
3、如果点击下面的”Next>”按钮,你还可以直接勾选你想测试的被测试类的方法,Eclipse将自动生成与被选方法相应的测试方法,点击“Fishish”按钮后一个测试用例就创建好了。 
4、编写完成你的测试用例后,点击“Run”按钮就可以看到运行结果了。 
3.8、JUnit的扩展应用 
以下罗列了些JUnit的扩展应用: 
JUnit + HttpUnit=WEB功能测试工具 
JUnit + hansel =代码覆盖测试工具 
JUnit + abbot =界面自动回放测试工具 
JUnit + dbunit =数据库测试工具 
JUnit + junitperf=性能测试工具 
3.9、一些使用JUnit经验 
不要用TestCase的构造函数初始化,而要用setUp()和tearDown()方法。 
不要依赖或假定测试运行的顺序,因为JUnit利用Vector保存测试方法。所以不同的平台会按不同的顺序从Vector中取出测试方法。 
避免编写有副作用的TestCase。例如:如果随后的测试依赖于某些特定的交易数据,就不要提交交易数据。简单的回滚就可以了。 
当继承一个测试类时,记得调用父类的setUp()和tearDown()方法。 
将测试代码和工作代码放在一起,一边同步编译和更新。 
测试类和测试方法应该有一致的命名方案。如在工作类名前加上test从而形成测试类名。 
确保测试与时间无关,不要依赖使用过期的数据进行测试。导致在随后的维护过程中很难重现测试。 
如果你编写的软件面向国际市场,编写测试时要考虑国际化的因素。不要仅用母语的Locale进行测试。 
尽可能地利用JUnit提供地assert/fail方法以及异常处理的方法,可以使代码更为简洁。 
测试要尽可能地小,执行速度快。 
参考资料与附件 
1. http:// www.junit.org JUnit官方网站 
2. http://bbs.51cmm.com 的测试论坛 
3. http://www.uml.org.cn 的软件测试专栏 
4. 单元测试 《程序员》 2002年7期 
5. JUnit设计模式分析 《程序员》2003年6期 
6. 《软件测试和JUnit实践》 
7. 附件Triangle.java 一个要测试的类 
Triangle.java 
/** 
* this is Triangle class 
* @author liujun 
*/ 
public class Triangle 
{ 
//定义三角形的三边 
protected long lborderA = 0; 
protected long lborderB = 0; 
protected long lborderC = 0; 
 
//构造函数 
public Triangle(long lborderA,long lborderB,long lborderC) 
{ 
this.lborderA = lborderA; 
this.lborderB = lborderB; 
this.lborderC = lborderC; 
} 
/** 
* 判断是否是三角形 
* 是返回ture;不是返回false 
*/ 
public boolean isTriangle(Triangle triangle) 
{ 
boolean isTrue = false; 
//判断边界,大于0小于200,出界返回false 
if((triangle.lborderA>0&&triangle.lborderA<200) 
&&(triangle.lborderB>0&&triangle.lborderB<200) 
&&(triangle.lborderC>0&&triangle.lborderC<200)) 
{ 
//判断两边之和大于第三边 
if((triangle.lborderA<(triangle.lborderB+triangle.lborderC)) 
&&(triangle.lborderB<(triangle.lborderA+triangle.lborderC)) 
&&(triangle.lborderC<(triangle.lborderA+triangle.lborderB))) 
isTrue = true; 
} 
return isTrue; 
} 
 
/** 
* 判断三角形类型 
* 等腰三角形返回字符串“等腰三角形”; 
* 等边三角形返回字符串“等边三角形”; 
* 其它三角形返回字符串“不等边三角形”; 
*/ 
public String isType(Triangle triangle) 
{ 
String strType = ""; 
// 判断是否是三角形 
if(this.isTriangle(triangle)) 
{ 
//判断是否是等边三角形 if(triangle.lborderA==triangle.lborderB&&triangle.lborderB==triangle.lborderC) 
strType = "等边三角形"; 
//判断是否是不等边三角形 
else if((triangle.lborderA!=triangle.lborderB)&& 
(triangle.lborderB!=triangle.lborderC)&& 
(triangle.lborderA!=triangle.lborderC)) 
strType = "不等边三角形"; 
else 
strType="等腰三角形"; 
} 
return strType; 
} 
} 
8. 附件ExampleTest.java 一个测试用例类 
ExampleTest.java 
import junit.framework.*; 
/** 
* Some tests. 
* 
*/ 
public class ExampleTest extends TestCase { 
public Triangle triangle; 
//初始化 
protected void setUp() { 
triangle=new Triangle(10,2,9); 
} 
 
public static Test suite() { 
return new TestSuite(ExampleTest.class); 
} 
//函数isTriangle()的测试用例 
public void testIsTriangle() { 
assertTrue(triangle.isTriangle(triangle)); 
} 
//函数isType()的测试用例 
public void testIsType() 
{ 
assertEquals("这次测试",triangle.isType(triangle),"不等边三角形"); 
} 
 
//执行测试 
public static void main (String[] args) { 
//文本方式 
junit.textui.TestRunner.run(suite()); 
//Swingui方式 
//junit.swingui.TestRunner.run(suite().getClass()); 
//awtui方式 
//junit.awtui.TestRunner.run(suite().getClass()); 
 
} 
} 
	posted on 2006-11-26 15:16 
matthew 阅读(507) 
评论(0)  编辑  收藏  所属分类: 
软件测试技术