使用JUnit进行单元测试
程序员要对自己编写的代码负责,不仅要保证其正常编译运行,更要满足需求和预期的效果,单元测试正是验证代码行为是否满足预期的有效手段之一,而JUnit正是使单元测试变得简单起来的一个开源测试框架,已经成为JAVA世界知名度最高的单元测试工具,并且在软件开发领域发挥着越来越重要的作用,毋庸置疑的成为了单元测试的一大“利器”。
本节需要大家了解:
软件测试的单元测试
使用JUnit进行单元测试
理解:
JUnit框架介绍
JUnit4的各种常用注解
运用:能结合MyEclipse或eclipse,熟练使用JUnit4搭建测试框架,并进行单元测试。
利用测试工具按照测试方案和流程对产品进行功能和性能测试,使用人工或自动手段来运行或测试某个系统的过程。目的在于检验是否满足规定的需求确认预期结果与实际结果之间的差别。随着人们对于软件质量要求的提高,软件测试的技术水平也会不断提高。
研究数据显示,国外软件开发机构40%的工作量都花在软件测试上,软件测试费用占软件开发总费用的30%-40%。对于一些可靠性、安全性要求比较高的软件,测试费用可能占整个软件项目开发费用的3-5倍。
例如:微软产品开发人员和测试人员比例
微软产品开发人员和测试人员比例 | |
人员组成 | Windows 2000 |
项目经理 | 250人 |
开发人员 | 1700人 |
测试人员 | 3200人 |
测试人员和开发人员比例 | 1.9:1 |
软件测试:
- 黑盒测试:它注重于测试软件的功能性需求,测试者完全不考虑程序的内部结构和特性,只需要知道程序输入和输出之间的关系或程序功能。比如:蚂蚁王国一年一度的“穿越迷宫大赛”,黑盒测试只关心穿越迷宫前的蚂蚁是否穿越成功到迷功另一侧的大米处,而对于迷宫内部的结构完全不用理会。
- 白盒测试:白盒测试人员需要对被测试程序的内部结构非常清楚,从程序的内部逻辑结构入手,来判定实际情况是否和预期的状态一致。这时,白盒测试的蚂蚁就必须对迷宫内部错综复杂的路况很清楚。
- 回归测试:指当程序代码被修改后,重新进行测试,以确认修改没有引发新的错误或导致其他代码产生错误。
- 单元测试:是软件开发过程中最低级别的测试,也是最小粒度的测试,主要测试程序中的某个功能或代码块。单元测试的工作一般由程序员来承担。
|
JUnit诞生于1997年,它是一个开放源代码的JAVA测试框架,用于编写和运行可重复的测试,麻雀虽小、五脏俱全,JUnit设计的虽然很小巧,但是功能却非常强大。有人这样评价它:在软件开发领域,从来就没有如此少的代码起到了如此重要的作用。它大大简化了开发人员执行单元测试的难度。JUnit提倡单元测试的简单化和自动化,而JUnit本身的设计也是遵循这个前提。
JUnit整个框架的骨架,由右边3个类组成 | TestCase类:负责测试时对客户类的初始化以及测试方法的调用 |
TestSuite类:负责包装和运行所有的测试类 | |
TestRunner类:是运行测试代码的运行器 | |
JUnit就是依赖这3个类进行单元测试,最终呈现一个测试结果:TestResult TestCase+TestSuite+TestRunner = TestResult |
TestCase类继承自Assert类,Assert类提供了JUnit使用的一整套断言,是一系列断言方法的集合。
Assert类常用的静态断言方法 | |
assertEquals(Object expected,Object actual)
| 判断期望值与实际值是否相等 例如:Assert.assertEquals(3,n),比较3和n是否相等 |
assertNotNull()/assertNull() | 用于判断一个对象是否非空或为空 例如:String s = null; Assert.assertNull(s) |
assertTrue()/assertFalse() | 用于判断条件是true还是false 例如:Assert.assertTrue(2==3) |
断言:就是一个包含布尔表达式的语句,在执行这个语句时,如果语句结果是false,系统会提示错误,它主要用于调试程序,反之就是成功的。说白了,断言就是用于判断期望值和实际值是否相等。
准备工作:
|
JUnit常用注解
标注名称 | 标注描述 |
@Before | 用于标注每一个测试方法执行前都要执行的方法 |
@After | 用于标注每一个测试方法执行后都要执行的方法 |
@Test | 用于标注一个测试方法 |
@Ignore | 用于标注因时制宜不参与测试的方法 |
@BeforeClass | 标注的方法在整个类的所有测试方法运行之前运行一次,且必须是static void |
@AfterClass | 标注的方法在整个类的所有测试方法运行结束之后运行一次,且必须是static void |
1.测试方法必须是public void,不能是private,不能有返回值,前面要加@Test
2.Import static org.junit.Assert.*这个是jdk1.5的新特性,叫静态导入,表示它会导入Assert类的所有静态方法,目的就是方便对类方法的调用。