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 阅读(477)
评论(0) 编辑 收藏 所属分类:
软件测试技术