测试对于保证软件开发质量有着非常重要的作用,单元测试更是必不可少,JUnit是一个非常强大的单元测试包,可以对一个/多个类的单个/多个方法测试,还可以将不同的TestCase组合成TestSuit,使测试任务自动化。Eclipse同样集成了JUnit,可以非常方便地编写TestCase。
我们创建一个Java工程,添加一个example.Hello类,首先我们给Hello类添加一个abs()方法,作用是返回绝对值:
下一步,我们准备对这个方法进行测试,确保功能正常。选中Hello.java,右键点击,选择New->JUnit Test Case:
Eclipse会询问是否添加junit.jar包,确定后新建一个HelloTest类,用来测试Hello类。
选中setUp()和tearDown(),然后点击“Next”:
选择要测试的方法,我们选中abs(int)方法,完成后在HelloTest.java中输入:
上图修改后的代码 :
package example;
import junit.framework.TestCase;
public class HelloTest extends TestCase {
Hello hello = new Hello();
protected void setUp() throws Exception {
super.setUp();
}
protected void tearDown() throws Exception {
super.tearDown();
}
public void testAbs(){
assertEquals(hello.abs(14), 14);
assertEquals(hello.abs(-5), 5 );
assertEquals(hello.abs(-0), 0);
}
}
JUnit会以以下顺序执行测试:(大致的代码)
| try { HelloTest test = new HelloTest(); // 建立测试类实例 test.setUp(); // 初始化测试环境 test.testAbs(); // 测试某个方法 test.tearDown(); // 清理资源 } catch… |
setUp()是建立测试环境,这里创建一个Hello类的实例;
tearDown()用于清理资源,如释放打开的文件等等。
以test开头的方法被认为是测试方法,JUnit会依次执行testXxx()方法。
在testAbs()方法中,我们对abs()的测试分别选择正数,负数和0,如果方法返回值与期待结果相同,则assertEquals不会产生异常。
如果有多个testXxx方法,JUnit会创建多个XxxTest实例,每次运行一个testXxx方法,setUp()和tearDown()会在testXxx前后被调用,因此,不要在一个testA()中依赖testB()。
直接运行Run->Run As->JUnit Test,就可以看到JUnit测试结果:
绿色表示测试通过,只要有1个测试未通过,就会显示红色并列出未通过测试的方法。可以试图改变abs()的代码,故意返回错误的结果(比如return n+1;),然后再运行JUnit就会报告错误。
如果没有JUnit面板,选择Window->Show View->Other,打开JUnit的View:
JUnit通过单元测试,能在开发阶段就找出许多Bug,并且,多个Test Case可以组合成Test Suite,让整个测试自动完成,尤其适合于XP方法。每增加一个小的新功能或者对代码进行了小的修改,就立刻运行一遍Test Suite,确保新增和修改的代码不会破坏原有的功能,大大增强软件的可维护性,避免代码逐渐“腐烂”。
来源:http://www.yesky.com/SoftChannel/72342371961929728/20041201/1882557.shtml
二、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”按钮就可以看到运行结果了。
JUnit的扩展应用
以下罗列了些JUnit的扩展应用:
JUnit + HttpUnit=WEB功能测试工具
JUnit + hansel =代码覆盖测试工具
JUnit + abbot =界面自动回放测试工具
JUnit + dbunit =数据库测试工具
JUnit + junitperf=性能测试工具
一些使用JUnit经验
不要用TestCase的构造函数初始化,而要用setUp()和tearDown()方法。
不要依赖或假定测试运行的顺序,因为JUnit利用Vector保存测试方法。所以不同的平台会按不同的顺序从Vector中取出测试方法。
避免编写有副作用的TestCase。例如:如果随后的测试依赖于某些特定的交易数据,就不要提交交易数据。简单的回滚就可以了。
当继承一个测试类时,记得调用父类的setUp()和tearDown()方法。
将测试代码和工作代码放在一起,一边同步编译和更新。
测试类和测试方法应该有一致的命名方案。如在工作类名前加上test从而形成测试类名。
确保测试与时间无关,不要依赖使用过期的数据进行测试。导致在随后的维护过程中很难重现测试。
如果你编写的软件面向国际市场,编写测试时要考虑国际化的因素。不要仅用母语的Locale进行测试。
尽可能地利用JUnit提供地assert/fail方法以及异常处理的方法,可以使代码更为简洁。
测试要尽可能地小,执行速度快。
三、junit常用的核心类(这些类都在包Junit.framework.*下):
(1)、TestCase(测试用例)-----扩展了Junit的TestCase类的类。它以testxxx方法的形式包含一个或多个测试,一个testcase把具有公共行为的测试归入一组。
(2)、TestSuite(测试集合)-----组测试,一个test suite是把多个相关测试归入一组的便捷方式。
(3)、TestRunner(测试运行器)-----执行test suite的程序。JUnit提供了几个test runner,junit.swingui.TestRunner,junit.awtui.TestRunner,junit.textui.TestRunner,你可以用他们来执行你的测试。
(4)、Assert:当条件成立时assert方法保持沉默,但条件不成立就抛出异常
(5)、TestResult:TestResult包含了测试中发生的所有错误或者失败
(6)、Test:可以运行Test并把结果传递给TestResult
(7)、TestListener:测试中若产生事件(开始,结束,错误,失败)会通知TestListener
四、Junit学习 http://hedong.3322.org/archives/000224.html (文章不错)
参考:http://blog.csdn.net/ai92/archive/2005/02/26/302844.aspx下载本文