Junit学习总结

上传人:s9****2 文档编号:556057099 上传时间:2024-02-20 格式:DOC 页数:11 大小:168.50KB
返回 下载 相关 举报
Junit学习总结_第1页
第1页 / 共11页
Junit学习总结_第2页
第2页 / 共11页
Junit学习总结_第3页
第3页 / 共11页
Junit学习总结_第4页
第4页 / 共11页
Junit学习总结_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《Junit学习总结》由会员分享,可在线阅读,更多相关《Junit学习总结(11页珍藏版)》请在金锄头文库上搜索。

1、Junit学习(一)TDD简介:许多书上都讨论了自动测试,但是只有很少的著作注意到这么一个问题,那就是怎样把这些测试组织起来。随着测试的增加,放置和调用这些测试却变得更加麻烦。这将成为一个重要问题,以至于出现了TDD,极限编程(XP)使TDD得以普及。另外,你可以这样理解TDD:通过测试来开发。TDD(Test-Driven Development:测试驱动开发)本质和优势测试驱动开发不是一种测试技术,它是一种分析技术、设计技术,更是一种组织所有开发活动的技术。相对于传统的结构化开发过程方法,它具有以下优势:1) TDD根据客户需求编写测试用例,对功能的过程和接口都进行了设计,而且这种从使用者

2、角度对代码进行的设计通常更符合后期开发的需求。因为关注用户反馈,可以及时响应需求变更,同时因为从使用者角度出发的简单设计,也可以更快地适应变化。2) 出于易测试和测试独立性的要求,将促使我们实现松耦合的设计,并更多地依赖于接口而非具体的类,提高系统的可扩展性和抗变性。而且TDD明显地缩短了设计决策的反馈循环,是我们几秒或几分钟之内就能获得反馈。3) 将测试工作提到编码之前,并频繁地运行所有测试,可以尽量地避免和尽早地发现错误,极大地降低了后续测试及修复的成本,提高了代码的质量。在测试的保护下,不断重构代码,以消除重复设计,优化设计结构,提高了代码的重用性,从而提高了软件产品的质量。4) TDD

3、提供了持续的回归测试,使我们拥有重构的勇气,因为代码的改动导致系统其他部分产生任何异常,测试都会立刻通知我们。完整的测试会帮助我们持续地跟踪整个系统的状态,因此我们就不需要担心会产生什么不可预知的副作用了。5) TDD所产生的单元测试代码就是最完美的开发者文档,它们展示了所有的API该如何使用以及是如何运作的,而且它们与工作代码保持同步,永远是最新的。6) TDD可以减轻压力、降低忧虑、提高我们对代码的信心、使我们拥有重构的勇气,这些都是快乐工作的重要前提。TDD现状由于发展时间不长,相关应用并不是很成熟。现今越来越多的公司都在尝试实践测试驱动开发,但由于测试驱动开发对开发人员要求比较高,更与

4、开发人员的传统思维习惯相违背,因此实践起来有一定困难。(二)Junit的简单介绍简单的说,junit 是用来做单元测试的一个工具。用其主页上的话来说就是:“JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing work)。在上可以下载到最新版本的junit包。单元测试是一种白箱测试。目的是验证一个或若干个类是否按所设计的那样正常工作。集成测试则是验证所有的类是否能互相配合,协同完成特定的任务。需要强调的是:测试是一个持续的过程。也就是说测试贯穿与开发的整个过程中,单元测试尤其适合于迭代增量式(iterative and i

5、ncremental)的开发过程。因为我们是测试新手,我们也不理会那些复杂的测试原理,先说一说最简单的:测试就是比较预期的结果是否与实际执行的结果一致。如果一致则通过,否则失败。(三)回归测试框架-JUnit回归测试就是你不断地对所编写的代码进行测试:编写一些,测试一些,调试一些,然后循环这一过程,你会不断地重复先前的测试,哪怕你正编写其他的类,由于软件熵的存在,你可能在编写第五个类的时候发现,第五个类的某个操作会导致第二个类的测试失败。通过回归测试我们抓住了这条大Bug。(四)junit中的几个关键点Junit4 与junit3相比,做了比较大的改动。具体不细讲了,有兴趣可在网上查找些资料进

6、行了解。1下面通过一个简单的实例对junit框架(函数结构)做个简单的介绍。比如下面一个类: public class AddOperation public int add(int x,int y) return x+y; 我们要测试add这个方法,我们在junit4中写单元测试得这么写: import junit.framework.TestCase; import org.junit.After; import org.junit.Before; import org.junit.Test; import static org.junit.Assert.*; /* * * author

7、bean */ public class AddOperationTest extends TestCase public AddOperationTest() Before public void setUp() throws Exception After public void tearDown() throws Exception Test public void add() System.out.println(add); int x = 0; int y = 0; AddOperation instance = new AddOperation(); int expResult =

8、 0; int result = instance.add(x, y); assertEquals(expResult, result); 几个元数据的介绍:Before: 使用了该元数据的方法在每个测试方法执行之前都要执行一次。 After: 使用了该元数据的方法在每个测试方法执行之后要执行一次。 注意:Before和After标示的方法只能各有一个。这个相当于取代了JUnit以前版本中的setUp和tearDown方法,当然你还可以继续叫这个名字,不过JUnit不会霸道的要求你这么做了。 Test(expected=*.class) 在JUnit4.0之前,对错误的测试,我们只能通过fai

9、l来产生一个错误,并在try块里面assertTrue(true)来测试。现在,通过Test元数据中的expected属性。expected属性的值是一个异常的类型 Test(timeout=xxx): 该元数据传入了一个时间(毫秒)给测试方法, 如果测试方法在制定的时间之内没有运行完,则测试也失败。 ignore: 该元数据标记的测试方法在测试中会被忽略。当测试的方法还没有实现,或者测试的方法已经过时,或者在某种条件下才能测试该方法(比如需要一个数据库联接,而在本地测试的时候,数据库并没有连接),那么使用该标签来标示这个方法。同时,你可以为该标签传递一个String的参数,来表明为什么会忽略

10、这个测试方法。比如:lgnore(“该方法还没有实现”),在执行的时候,仅会报告该方法没有实现,而不会运行测试方法。 另外还有一些其他的元数据,具体请自己查资料。setUp与tearDown,这两个函数是junit framework中提供初始化和反初始化每个测试方法的。setUp在每个测试方法调用前被调用,负责初始化测试方法所需要的测试环境;tearDown在每个测试方法被调用之后被调用,负责撤销测试环境。它们与测试方法的关系可以描述如下: 测试开始 - setUp - testXXXX - tearDown -测试结束 2另一个实例说明建立测试的流程(步骤):假设我们要写一个整数除法和乘法

11、的类,并且给他写测试用例:1) 建立Math类Java代码1. /*2. *authorbimingwei3. *描述:一个整数除法和乘法的工具类4. */5. publicclassMath6. publicstaticintdivide(intx,inty)7. returnx/y;8. 9. 10. publicstaticintmultiple(intx,inty)11. returnx*y;12. 13. 2) 建立测试用例选中需要建立测试用例的包,选择new-other-JUnit Test Case。有5个方法可以选择:setUp()方法在测试方法前调用,一般用来做测试准备工作。

12、tearDown()方法在测试方法后调用,一般作测试的清理工作。setUpBeforeClass()方法在整个类初始化之后调用,一般用来做测试准备工作。tearDownAfterClass()方法在整个类结束之前调用,一般作测试的清理工作。constructor()为是否包含构造方法。自动生成的代码如下:Java代码1. /*2. *author bimingwei3. *描述:4. */5. publicclassMathTest6. 7. BeforeClass8. publicstaticvoidsetUpBeforeClass()throwsException9. 10. 11. Af

13、terClass12. publicstaticvoidtearDownAfterClass()throwsException13. 14. 15. Test16. publicvoidtestDivide()17. fail(Notyetimplemented);(注意重写该方法时,要将该语句删除)18. 19. 20. Test21. publicvoidtestMultiple()22. fail(Notyetimplemented);23. 24. 说明:BeforeClass标签注释的方法用于在整个类测试过程的初始化后调用一次,AfterClass标签注释的方法则是整个测试类结束之前

14、调用一次。这2个标签的搭配可以避免使用Before、After标签组合在每个测试方法前后都调用的弊端,减少系统开销,提高系统测试速度。(不过对环境独立性要求较高的测试还是应当使用Before、After来完成)Test标签用来标注待测试的方法,按照类中声明的顺序执行。我们在testDivide方法加入测试代码,分别测试三种情况:a. 完全正确也没有可能出错的数据,如:9除3 结果必须等于3b. 可能有问题的边缘数据,如:10除3 结果也必须等于3c. 错误的数据,如:10除0 必须抛出异常忽略testMultiple方法代码如下:Java代码1. Test(expected=ArithmeticException.class)2. publicvoidtestDivide()3. assertEquals(3,Math.divide(9,3);4.

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号