本文共 2522 字,大约阅读时间需要 8 分钟。
开发过程中,单元测试对于软件质量有着重大的影响,而且对于集成测试来说,经过完整单元测试的代码可以大大减少集成测试的工作量。
JUnit是一个Java语言的单元测试框架,JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework), JUnit有它自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。Junit是一套框架,继承TestCase类,就可以用Junit进行自动测试了。Junit 目前主要是Junit4,本次实践都使用junit4
了解Junit测试包如何使用
对于junit中的一些基本annotation进行验证
1、创建一个java工程,生成一个类,取名为Calc。 Calc里面主要有2个方法,分别是计算 “加法”,“除法”。
package com.study.junit;public class Calc { int add(int x, int y){ return x+y; } int divide(int x, int y){ return x/y; }}
2、在工程上,右键new-》Junit Test Case 选中
在弹出的菜单中,填入测试类名称( 一般用 被测对象类名+Test 作为测试类名),配置好被测对象类名,举例如下
3、编写测试方法
package com.study.junit;import static org.junit.Assert.*;import static org.hamcrest.Matchers.*;import org.junit.After;import org.junit.AfterClass;import org.junit.Before;import org.junit.BeforeClass;import org.junit.Ignore;import org.junit.Test;public class CalcTest { @Test public void testAdd() { int z = new Calc().add(10, 20); assertEquals(30, z); assertThat("hello", z, is(30)); assertThat("range",z, allOf( lessThan(40),greaterThan(20))); System.out.println("after run"); } @Test(timeout=100) //打上@Test 标记,才会认为是要进行测试的对象,否则不测试 //在()中填入 抛出异常内容,也可以测试是否抛出 // timeout=100, 表示期望下午方法在100毫秒内结束 public void testDivide(){ for(int j=0; j<1000; j++){ int z= new Calc().divide(8, 2); } //assertThat("divide", z , is (4)); System.out.println("run"); } }测试类里面, 要测试的方法,需要打上@Test 标志,如果没有打上的,不会被作为测试项执行。@Test(timeout=100) 表示这个测试期望在100毫秒内执行完毕,否则算测试不通过。
4、运行测试
在测试类上,右键-》run as ->Junit Test
就可以进行单元测试了。测试信息如下:
Runs 这里体现了执行了多少个测试, 也就是打上@Test 标记的测试项。 Error 表示 执行测试项目中出错了,表示编写的测试类运行中出现故障。 Failure 表示测试类正常运行完成后,有多少测试项目与预期不同。
assertThat("hello", z, is(30)); 表示我们期望 z 的值是 30,如果计算出来的 z值与期望值不符,那么这个测试项目就没有通过 failure。 “hello”,是一个字符串,用来标记一个判别的,在有很多测试项的时候,可以很快发现没有通过测试项的位置。
assertEquals(30, z); 也是用来判别实际值与预期值的差别的。 assertThat 是junit 4 出现的写法,使得测试条件的编写更加的贴近我们平时的描述性语法。
5、 几个annotation说明
@Test //表明这是一个测试项目 @Ignore //暂时忽略掉,当测试条件不具备的时候,可以使用这个标识 @After //在每一个方法之后执行 @Before //在每一个方法之间执行 @AfterClass //在全部执行之后执行一次 必须是static 当需要提供公共资源的时候 @BeforeClass //在全部执行之前执行一次 必须是static 需要进行资源释放的时候 @AfterClass和@BeforeClass 的使用场景:比如测试很多项目,在测试开始之前,我们需要建立数据库连接,并且获取数据库操作的seesion, 而在全部的操作结束后,我们要释放数据库seesion。 需要注意的是这两个必须要用static方法。
6、多个类的测试用例如何一起测试
一般情况下,我们会有很多类需要测试,而且希望一次性都测试一遍,这个时候可以这样操作: 工程上右键-》run as
进入运行配置界面
这样可以把需要测试的项目都一起进行运行测试。
Junit 是单元测试的最流行工具,提供了比较丰富的执行测试调度的方式。对于junit4测试,如果使用assertThat 方式,需要引入下面的jar包,最好连junit包,也使用自己的。Junit的jar包,如下: