使用步骤如下:
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 一个要测试的类
8. 附件ExampleTest.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; } } 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()); } }