查看“JUNIT”的源代码
←
JUNIT
跳转至:
导航
、
搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于这些用户组的用户使用:
管理员
、
行政员
、users
您可以查看与复制此页面的源代码。
== 基本简介 == [[File:01300000165488122495070994350.jpg|thumb|junit]][[File:01300000165488122495072645675.jpg|thumb|junit]]JUnit是一个开发源代码的Java测试框架,用于编写和运行可重复的测试。他是用于[[单元测试]]框架体系xUnit的一个实例(用于java语言)。它包括以下特性: 1、用于测试期望结果的断言(Assertion);2、用于共享共同测试数据的[[测试工具]];3、用于方便的组织和运行测试的测试套件;4、图形和文本的测试运行器。 测试流程:1、扩展TestCase类;2、覆盖runTest()方法(可选);3、对应测试目标类书写testXXXXX()方法;4、扩展TestSuite类,[[重载]]suite()方法,实现自定义的测试过程;5、运行TestRunner进行测试; == 功能作用 == [[File:01300000165488122495073644508.jpg|thumb|junit]]junit是在xp编程和重构(refactor)中被极力推荐使用的工具,因为在实现自动单元测试的情况下可以大大的提高开发的效率,但是实际上编写测试[[代码]]也是需要耗费很多的时间和精力的: 1、对于xp编程而言,要求在编写代码之前先写测试,这样可以强制你在写代码之前好好的思考代码(方法)的功能和[[逻辑]],否则编写的代码很不稳定,那么你需要同时维护测试代码和实际代码,这个工作量就会大大增加。因此在xp编程中,基本过程是这样的:构思-》编写测试代码-》编写代码-》测试,而且编写测试和编写代码都是增量式的,写一点测一点,在编写以后的代码中如果发现问题可以较块的追踪到问题的原因,减小[[回归错误]]的纠错难度。 2、对于重构而言,其好处和xp编程中是类似的,因为重构也是要求改一点测一点,减少回归错误造成的时间消耗。 3、对于非以上两种情况,在开发的时候使用junit写一些适当的测试也是有必要的,因为一般也是需要编写测试的代码的,可能原来不是使用的junit,如果使用junit,而且针对接口(方法)编写测试代码会减少以后的维护工作,例如以后对方法内部的修改(这个就是相当于重构的工作了)。另外就是因为junit有[[断言功能]],如果测试结果不通过会那个测试不通过,为什么,而如果是想以前的一般做法是写一些测试代码看其输出结果,然后再由自己来判断结果使用正确,使用junit的好处就是这个结果是否正确的判断是它来完成的,只需要看看它告诉结果是否正确就可以了,在一般情况下会大大提高效率。 == 框架介绍 == [[File:01300000165488122495074871588.jpg|thumb|junit]]一、TestCase 测试用例,对每个测试类,都要定义一个测试用例。JUnit支持两种运行单个测试的方法:静态的和动态的方法。 1、[[静态]]的方法就是覆盖TestCase类的runTest()方法,一般是采用内部类的方式 创建一个测试实例: TestCase test01 = new testCar("test getWheels") { public void runTest() { testGetWheels();} } 采用静态的方法要注意要给每个测试一个名字,这样你就可以区分哪个测试失败了。 2、动态的方法是用[[内省]]来实现runTest()以创建一个测试实例。这要求测试的名字就是需要调用的测试方法的名字: TestCase test01 = new testCar("testGetWheels"); JUnit会动态查找并调用指定的测试方法。动态的方法很简洁,但如果你键入了错误的名字就会得到一个令人奇怪的NoSuchMethodException异常。动态的方法和静态的方法都很好,你可以按照自己的喜好来选择。 二、TestSuite 一旦你创建了一些测试实例,下一步就是要让他们能一起运行。必须定义一个TestSuite。在JUnit中,这就要求你在TestCase类中定义一个静态的suite()方法。suite()方法就像main()方法一样,JUnit用它来执行测试。在suite()方法中,你将测试实例加到一个TestSuite对象中,并返回这个TestSuite对象。一个TestSuite[[对象]]可以运行一组测试。TestSuite和TestCase都实现了Test接口,而Test接口定义了运行测试所需的方法。这就允许你用TestCase和TestSuite的组合创建一个TestSuite。public static Test suite() { TestSuite suite= new TestSuite(); suite.addTest(new testCar("testGetWheels")); suite.addTest(new testCar("testGetSeats")); return suite; }public static Test suite() { return new TestSuite(testCar.class); } [[File:01300000165488122495076010224.jpg|thumb|junit]]三、TestRunner 有了TestSuite就可以运行这些测试了,JUnit提供了三种界面来运行测试 [Text UI] junit.textui.TestRunner [AWT UI] junit.awtui.TestRunner [Swing UI] junit.swingui.TestRunner java junit.textui.TestRunner yourTestclass Fixture 如果需要在一个或若干个的类执行多个测试,这些类就成为了测试的context。在JUnit中被称为[[Fixture]]。当你编写测试代码时,你会发现你花费了很多时间配置/初始化相关测试的Fixture。将配置Fixture的代码放入测试类的构造方法中并不可取,因为要求执行多个测试,我并不希望某个测试的结果意外地影响其他测试的结果。通常若干个测试会使用相同的Fixture,而每个测试又各有自己需要改变的地方。 为此,JUnit提供了两个方法,定义在Test Case类中。 protected void setUp() throws java.lang.Exception protected void tearDown() throws java.lang.Exception 覆盖setUp()方法,初始化所有测试的Fixture,如建立[[数据库]]连接,将每个测试略有不同的地方在testXXX()方法中进行配置。覆盖tearDown(),释放你在setUp()中分配的永久性资源,如数据库连接。 当JUnit执行测试时,它在执行每个testXXXXX()方法前都调用setUp(),而在执行每个testXXXXX()方法后都调用tearDown()方法,由此保证了测试不会相互影响。 四、Assert Assert类中定义了相当多的assert方法,主要有assert(),assertEquals(), assertNull(), assertSame(), assertTrue(), fail()等方法。Faile失败是一个期望的被assert方法检查到的结果。Error错误则是意外的问题引起的,如ArrayIndexOutOfBoundsException。 == 实践方法 == [[File:01300000165488122495077798243.gif|thumb|junit]]1、不要用TestCase的构造[[函数]]初始化Fixture,而要用setUp()和tearDown()方法。2、不要依赖或假定测试运行的顺序,因为JUnit利用Vector保存测试方法。所以不同的平台会按不同的顺序从Vector中取出测试方法。3、避免编写有副作用的Test Case。例如:如果随后的测试依赖于某些特定的交易数据,就不要提交交易数据。简单的会滚就可以了。4、当继承一个测试类时,记得调用[[父类]]的setUp()和tearDown()方法。5、将测试代码和工作代码放在一起,一边同步编译和更新。(使用Ant中有支持junit的task.)6、测试类和测试方法应该有一致的命名方案。如在工作类名前加上test从而形成测试类名。7、确保测试与时间无关,不要依赖使用过期的数据进行测试。导致在随后的维护过程中很难重现测试。8、如果你编写的[[软件]]面向国际市场,编写测试时要考虑国际化的因素。不要仅用母语的Locale进行测试。9、尽可能地利用JUnit提供地assert/fail方法以及异常处理的方法,可以使代码更为简洁。10、测试要尽可能地小,执行速度快。 == 和ant结合 == [[File:01300000165488122495079135901.gif|thumb|junit]]ant提供了两个target:junit和junitreport运行所有测试用例,并生成html格式的报表。具体操作如下: 1、将junit.jar放在ANT_HOMElib目录下2、修改build.xml,加入如下内容:--------------One or more tests failed,check the report for detail--------------- 运行这个target,ant会运行每个TestCase,在report目录下就有了很多TEST*.xml和一些网页打开report[[目录]]下的index.html就可以看到很直观的测试运行报告,一目了然。在Eclipse中开发、运行JUnit测试相当简单。因为Eclipse本身集成了JUnit相关组件,并对JUnit的运行提成了无缝的支持。 [[Category:技術應用]]
返回至
JUNIT
。
导航菜单
华夏文化百科
访客
个人工具
创建账户
登录
名字空间
页面
讨论
不转换
不转换
简体
繁體
大陆简体
香港繁體
澳門繁體
大马简体
新加坡简体
台灣正體
视图
查看
查看源代码
历史
操作
搜索
华韵导航
子站导航
首页
查字
助手
经典
文集
重要典籍
家训大全
论语集释
周易
资治通鉴
竹书纪年
十三经
金瓶梅小说
古典小说
百科导航
新撰词条
近篡词条
待撰词条
随机页面
使用帮助
工具
链入页面
相关更改
特殊页面
页面信息
旧字形下载
DroidSansFallback(荐)
H-MingLiUC-98(荐)
花园明朝体九万汉字
海峰十三万汉字库
极点海峰9.5词库
更多