在介绍JUnit之前,先谈一谈XP、TDD以及Refactor。 XP(极限编程)是一个轻量级的、灵巧的软件开发方法;同时它也是一个非常严谨和周密的方法。它的基础和价值观是交流、朴素、反馈和勇气;即,任何一个软件项目都可以从四个方面入手进行改善:加强交流;从简单做起;寻求反馈;勇于实事求是。XP是一种近螺旋式的开发方法,它将复杂的开发过程分解为一个个相对比较简单的小周期;通过积极的交流、反馈以及其它一系列的方法,开发人员和客户可以非常清楚开发进度、变化、待解决的问题和潜在的困难等,并根据实际情况及时地调整开发过程。 TDD(测试驱动开发)是敏捷开发中的一项核心实践和技术,也是一种设计方法论。TDD的原理是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码。TDD虽是敏捷方法的核心实践,但不只适用于XP(Extreme Programming),同样可以适用于其他开发方法和过程。TDD的基本思路就是通过测试来推动整个开发的进行,但测试驱动开发并不只是单纯的测试工作,而是把需求分析,设计,质量控制量化的过程。 Refactor(软件重构)是指在不改变软件的功能和外部可见性的情况下,为了改善软件的结构,提高清晰性、可扩展性和可重用性而对软件进行的改造。简而言之,重构就是改进已经写好的软件的设计。 再谈谈测试的相关知识以及重要性: 静态测试:在不运行程序的情况下检查程序的运行情况。(需求评审,设计评审以及代码检查) 动态测试:运行程序代码。(单元测试,集成测试,系统测试,用户的验收测试以及回归测试) 黑盒测试:在不了解系统结构的情况下以说明书为基础进行测试,属于功能测试 白盒测试:以系统内部结构和相关知识为基础进行测试,属于结构测试。
单元测试又称为模块测试,是针对软件设计的最小单位--程序模块,进行正确性检验的测试工作。其目的在于发现各模块内部可能存在的各种差错。它需要从程序内部结构触发设计测试用例。多个模块的单元测试可以并行进行。 在单元测试时,测试者需要依据详细的设计说明书和源程序清单,了解该模块的I/O条件和模块的逻辑结构,主要采用白盒测试的测试用例,辅之以黑盒测试的测试用例,使之对任何合理的输入和不合理的输入,都能鉴别和响应。
JUnit是一个开发源代码的Java测试框架,用于编写和运行可重复的测试。是用于单元测试框架体系XUnit的一个实例。它由Erich Gamma(GoF之一)和Kent Beck(xp和refactor的先驱之一)编写的。 Junit与XP 在XP编程中,基本过程是这样的:构思-->编写测试代码-->编写代码-->测试。其中编写测试和编写代码都是增量式的、迭代式的(在UP统一过程中也是这样的),写一点测一点,在编写以后的代码中如果发现问题可以较快的追踪到问题的原因,减小回归错误的纠错难度。它适用于中小型编程。并非所有的构思全出来了,然后再编写所有的测试代码,然后编写所有的代码,再来测试,而是根据任务优先级,先构建核心任务的测试,编写其实现代码,进行测试,然后再其基础上一点点扩充增强其功能,不会存在瞻前顾后的情况。它关注的就是单元测试,可见JUnit在其中扮演多么重要的角色。 JUnit与Refactor 重构就是修改现有的代码使之设计良好。设计模式是重构的目标。重构通常不会对代码进行大量的测试,而是改一点测一点,这样可以得到我们可以信赖的代码,减少回归错误造成的时间消耗。 怎么使用? (1)在Eclipse下新建一个Java项目,然后把Junit的包添加到项目中来。
(3)在弹出的对话框中,选择JUnit版本(选择Eclipse安装目录下现有的JUnit版本),点击Finish即可将JUnit的包加到当前项目中。
(4)在项目的src下的Filter包里有一个Add.java文件,现在为Add类添加测试用例。选中该文件,然后右键New->Junit Test Case即可。先看一下Add.java public class Add { }
(5)在打开的New Junit Test Case对话框中,选择JUnit版本,测试用例名称(缺省使用“类名+Test ”作为用例名称),选择要创建的方法setUp()和tearDown()(这两个方法相当于C++类中的构造器和析构器),最后点击Next。
(5)在Next对话框中,选择要测试的方法(类自身的方法Add的父类中的一些方法),这儿选择Add的foo()方法,然后点击Finish,这样一个AddTest类就创建好了。 AddTest.java package Filter; import junit.framework.TestCase; public class AddTest extends TestCase { private Add s1, s2; protected void setUp() throws Exception { public void testFoo() { } 这时,运行该java即可得到测试的结果。
这是单个Test Case,还可以创建一组Test Case套件,即Test Suite。Test Suite会使用反射动态的创建一个包含所有的testXxxx方法的测试套件。怎么创建呢? 选中项目,右键New-->Other-->Java-->JUnit -->JUnit Test Suite-->Next。如下图: 选择要在套件中包含的所有Test Case所在的Package,并选择要包含的Test Case(这儿还有另外一个原理同Add的类的Test Case一样的Time类的Test Case:TimeTest.java )。该套件命名为AllTests,然后点击Finish。这样就可以生成一个AllTests.java的文件,只要执行它,所有的测试用例都被执行了,测试结果同测试用例的结果一样显示,节省了每个Test Case分别执行的麻烦。 AllTests.java的代码如下:(Time.java以及TimeTest.java的代码略) import junit.framework.Test; public class AllTests { public static Test suite() { } AllTests.java的执行结果如下:
JUnit编写测试代码的最佳实践
|
Java----junit
最新推荐文章于 2024-09-23 09:09:27 发布