1.JUnit4快速入门
1.1 JUnit4的简洁:
JUnit4的官网(junit.org)有详细定义:JUnit is a simple framework to write repeatable tests.It is an instance of the xUnit architecture for unit testing framework.意思是:JUnit是一个用于编写可复用测试集的简单框架,它是xUnit的子集。那么xUnit是什么呢?xUnit是一套基于测试驱动开发的测试框架。使我们能够快速的写单元测试。xUnit的家族成员众多,其中包括Python的单元测试PythonUnit,面向C++的CppUnit以及用于Java丹云测试的JUnit等。
JUnit托管在gitHub上,网址为http://github.com/junit-team/junit/wiki/Download-adn-Install,JUnit有两个包,分别是junit.jar和hamcrest-core.jar。
1.2 JUnit3和JUnit4的区别:
①JUnit4所有的测试方法前用@test注释,JUnit3的测试方法必须是以test作为前缀。
②JUnit3必须继承junit.framework.TestCasel类,而JUnit4不需要继承任何类
③另外,JUnit3初始化资源的方法必须命名为setUp,测试结束后,释放资源的方法必须命名为tearDown,而JUnit4完全没有限制
1.3 我们为什么要使用JUnit呢?
使用断言机制,将期望的结果跟运行的结果比对,给出测试结果。方便、高效、分离。
1.4 如何开发测试用例
工具:eclipse,由于eclipse包含了JUnit4,所以不再单独下载。
首先贴一下代码结构图:
①新建一个java project,命名为junit4Demo;
②在src上,创建一个新的包:com.mac.unit;
③写一个用于被测试的类,在包com.mac.unit下,命名为Calculator,该类有四个方法,进行加减乘除运算;
package com.mac.unit; public class Calculator { public int add(int a,int b){ return a + b; } public int subtract(int a, int b){ return a - b; } public int multiply(int a, int b){ return a * b; } public int divide(int a, int b){ return a / b ; } }
④接下来,我们导入JUnit包,在项目上,单击右键,build path->Add Library->JUnit->next->选择JUnit4->Finish.这样,在项目的树状结构中就能看到JUnit4的文件夹。
⑤新建测试类,在当前包中,new ->JUnit Test Case,命名为CalculatorTest。这个测试类会自动生成一个模板,我们仿照它写一个我们自己的测试方法。
package com.mac.unit; import static org.junit.Assert.*; import org.junit.Test; public class CalculatorTest { @Test public void test() { fail("Not yet implemented"); } }
添加我们的方法,并将test方法删除:
package com.mac.unit; import static org.junit.Assert.*; import org.junit.Test; public class CalculatorTest { @Test public void add(){ assertEquals(6,new Calculator().add(3,3)); } }
⑥运行上面这个测试类CalculatorTest,右键->run as ->JUnit Test.运行结果如下图:
扩展一下:
介绍一下JUnit视图:
Runs:表示测试正确执行的方法
Errors:表示错误的方法
Failures:表示期望结果跟测试结果不相同的方法
绿色的状态条表示正常执行,红色的状态条表示出现错误或者异常。
包下面的方法前面有绿色对号,表示正常执行,否则就是出现错误或者出现异常的方法。
2.JUnit4使用详解
2.1 JUnit4最佳实践
在快速入门中,将测试代码和被测试代码放在同一个包下面,显然这样做不合理,测试代码孩子是在开发时用到,在产品中是不会出现的,因此,需要优化代码结构。
在项目的下面新建一个源文件夹(Source Folder)test,将测试代码全部放在test下面,这样做得目的是源代码和测试代码分离,并且查阅方便。
在产品最终发布是,将该目录删除即可,不会对项目产生任何影响。
注意:测试包名和被测试代码包名必须相同。
进一步完善测试代码:
package com.mac.unit; import static org.junit.Assert.*; import org.junit.Test; public class CalculatorTest { @Test public void testAdd(){ assertEquals(6,new Calculator().add(3, 3)); } @Test public void testSubtract(){ assertEquals(5,new Calculator().subtract(11, 6)); } @Test public void testMultiply(){ assertEquals(9,new Calculator().multiply(3, 3)); } @Test public void testDivide(){ assertEquals(4,new Calculator().divide(12, 3)); } }
测试结果:
JUint的使用技巧:
①如果我们只想对某个方法进行测试,只需要打开测试代码的树状结构,选中要测试的方法,右键->Run as->JUnit Test即可。
②现在假设我们有很多类,类又有很多方法,我们一个一个的敲出来,这个有点庞大,那么,可否有简单的方法呢?答案是肯定。
在项目名称(假如我的项目是Junit4Demo)上右键->new->other->在选择向导中输入“junit”->选择JUnit Test Case(其实就在Java->JUnit->JUnit Test Case)->next,在source folder中选择test,name为CalculatorTest3,Class under test选择被测试的类(com.mac.unit.Calculator),然后next,选择要被测试类要测试的方法,然后Finish。
以上操作生成的代码如下:
#CalculatorTest3.java
/** * */ package com.mac.unit; import static org.junit.Assert.*; import org.junit.Test; /** * @author zhoujunwen * */ public class CalculatorTest3 { /** * Test method for {@link com.mac.unit.Calculator#add(int, int)}. */ @Test public void testAdd() { fail("Not yet implemented"); } /** * Test method for {@link com.mac.unit.Calculator#subtract(int, int)}. */ @Test public void testSubtract() { fail("Not yet implemented"); } /** * Test method for {@link com.mac.unit.Calculator#multiply(int, int)}. */ @Test public void testMultiply() { fail("Not yet implemented"); } /** * Test method for {@link com.mac.unit.Calculator#divide(int, int)}. */ @Test public void testDivide() { fail("Not yet implemented"); } }
框架代码已经生成,那么接下来就需要自己去实现测试的逻辑。
本例中的逻辑代码,即测试代码如2.1中最佳实践中优化完善的代码一样,此处就不做展示。
③最简单的生成测试代码:右键选中被测试的类,new->JUnit Test Case,在JUnit TestCase窗口中,选择new JUnit 4 test,Source folder选择test源文件,如下图所示:
下面就和②一样了。
PS: (1).测试方法上必须使用@test进行修饰
(2).测试服昂发必须使用public void 进行修饰,不能带任何的参数
(3).新建一个源代码目录来存放我们的测试代码
(4).测试类的包应该和被测试类的包保持一致
(5).测试单元中的每个方法必须可以独立测试,测试方法间不能有任何依赖
(6).测试类使用Test作为类名的后缀(不是必须的)
(7).测试方法使用test作为方法名的前缀(不是必须的)
3.JUnit4的深入使用
4.JUnit4在web项目中的使用