一文搞定java单元测试junit
首先什么是单元测试?
单元测试就是编写测试代码,用以检测特定的、明确的、细颗粒的功能! 严格来说,单元测试只针对具体功能点进行测试,不包括对整个业务流程正确性的测试。
目前java开发所用的单元测试是Junit框架,在大多数java的开发环境中已经集成,可以方便开发自己调用!
本文主要介绍一下junit的基本使用。
1:导入
当我们想在我们的项目中使用junit的时候,怎么导入呢?以eclipse为例,在项目中右键buildpath—>点击configure build path,如下图:
然后,点击library的add library
然后选择junit
Next 选择junit4
点击finish,项目中就有junit的包了,就可以正常使用了
如下:
2:创建测试用例类
当项目中可以使用junit后,将被测试的功能类添加进项目,然后创建测试用例的包,下来就可以创建测试用例类了
如图:
在包的右键中,new选择other
在other中选择java中的junit的testcase
这时候会弹出:
在上面红框中给自己的用例类起个名字,下面的红框中选择被测试的功能类,
中间绿色框中是几个继承方法,生成后说明
然后点击finish
用例类生成成功
这里面上面四个就是刚才勾选的四个方法,如注释说明,两个控制整个测试过程,两个控制单个测试方法的执行过程,都是前置和后置执行方法。
具体注解说明如下:
@BeforeClass 全局只会执行一次,而且是第一个运行
@Before 在测试方法运行之前运行
@Test 测试方法
@After 在测试方法运行之后允许
@AfterClass 全局只会执行一次,而且是最后一个运行
@Ignore 忽略此方法
接下来就可以在@test注解的方法中完成用例方法了
3:断言
JUnit的核心内容就是断言,其主要作用在于判断我们程序执行的结果是否跟我们预期的一致。
4:用例方法的实现
学会了使用断言后,就可以在测试方法中调用功能方法,得到其返回值,然后设计自己的测试用例的预期结果,通过断言比较两个结果,就可以实现测试用例方法了。
简单举个例子:
有个被测方法,很简单,两个数相加:
然后在用例方法中,调用其功能,设计数据,得到实际结果,就可以与预期通过断言比对了
然后右键执行,可能有两种结果,一种是通过,一种是fail,关键取决于数据的设计
如下:
右键测试用例类,选择run as 中的junit Test就可以执行用例方法了
结果:这是失败的例子
可以看出,执行了一个,失败了一个,原因是预期18 但是实际是17
改一下数据,重新运行,
发现通过了。
5:junit参数化
如果测试的代码大同小异,代码结构也都是相同的,不同的只是测试的数据和预期值,那么我们有没有更好的办法将相同的代码结构提取出来,提高代码的重用度呢?
解决:可以进行参数化测试。
步骤:
1:要进行参数化测试,需要在类上面指定如下的运行器:@RunWith (Parameterized.class)
2:在提供数据的方法上加上一个@Parameters注解,这个方法必须是静态static的,并且返回一个集合Collection。
3:在测试类的构造方法中为各个参数赋值,(构造方法是由JUnit调用的),最后编写测试类,它会根据参数的组数来运行测试多次。
如下代码:
6:测试套件TestSuit的使用
在测试类不端增加的情况下,如何运行所有的单元测试代码类?一个个测试类的执行吗?显然繁琐且费劲。 将要运行的测试类都集成在我们的测试套件中,比如一个系统功能对应一个测试套件,一个测试套件中包含多个测试类,每次测试系统功能时,只要执行一次测试套件就可以了。
如下代码实现,就可以一起执行我们的测试用例类的所有用例方法了: