JUnit如何使用介绍

第一步,使用前的环境配置准备工作。(在此文档中我使用JUnit的版本为JUnit4.3.1)先检查一下你的Eclipse环境是否已经有编写JUnit测试类的环境了,如果有了就可以直接使用了,如果没有安装,请参考以下操作,如:在Eclipse要安装那些插件和写JUnit测试类时,项目中要导入那些相应的.jar包。按照下列步骤执行:

1,  从junit.org官方网站或其他途径下载你需要版本的JUnit包。

2,  把你下载的包释放在自己电脑的某个目录。(比如:D:/java)

3,  把你释放文件中的如:org.junit4_4.3.1文件拷贝Eclipse的/plugins目录下,如果你的电脑上的环境安装了MyEclipse6.0插件了,这个文件也就存在/plugins目录下了,也就是说你要写JUnit的测试类环境已经好了,可以直接写了。

4,  以下是如何检验JUnit是否已经安装成功:

第一种方法:在EclipseàWindowàPreferencesàJavaàJUnit是否存在,如果存在JUnit就算安装好了。如下图所示:

 

另一种方法:在EclipseàWindowàShowViewàOtheràJavaàJUnit是否存在,如果存在JUnit就算安装好了。如下图所示:

 

 

 

接下来,我们要来往要使用JUnit测试的项目中,导入JUnit相应的版本包,如下所示:

在项目中要导入的.jar文件:

 

第二步,我们来编写第一个JUnit测试类,从数据库中取出一条记录的测试类。

1,  要在项目里选中的test路径下创建测试类,如下图所示:

2,  在选中的test路径上右击NewàOtheràJUnitàJUnit Test Case如下图所示:

3,  在选中JUnit Test Case时,点击Next按钮出现下图所示:

4,  在红框中有Name:输入框里填写上测试类的名称,如:TestGetOneData,点击Finish按钮即可, TestGetOneData.java测试类就创建完成了。

 

类名:TestGetOneData.java

TestGetOneData.java代码如下:

package com.whh.test.test; 
  
 
import staticassertEquals; 
  
import java.sql.Connection; 
  
import java.sql.DriverManager; 
  
import java.sql.ResultSet; 
  
import java.sql.Statement; 
  
import org.junit.After; 
  
import org.junit.Before; 
  
import org.junit.Test; 
  
 
/** 
  
 * 测试从数据库中的某表中取出一条记录 
  
 *  
  
 * @author wanghonghai 
  
 *  
  
 */ 
  
public class TestGetOneData { 
  
 
    private Connection conn = null; 
  
    private String url = "jdbc:oracle:thin:@localhost:1521:whhdb"; 
  
    private String driverClassName = "oracle.jdbc.driver.OracleDriver"; 
  
    private String user = "whh"; 
  
    private String pass = "whh"; 
  
 
//setup()方法中放置标准资源初始化 
  
    @Before 
  
    public void setUp() throws Exception { 
  
       Class.forName(driverClassName).newInstance(); 
  
       conngetConnection(url, user, pass); 
  
    } 
  
 
//tearDown()方法中放置标准资源回收 
  
 
    @After 
  
    public void tearDown() throws Exception { 
  
       conn = null; 
  
    } 
  
 
//testGetOneData()方法中放置的是需要测试代码或要测试的另一个类中的方法 
  
 
    @Test 
  
    public void testGetOneData() { 
  
       try { 
  
           Statement st = conn.createStatement(); 
  
           String sql = "select u_name from WHH_USER_INFO where U_ID = 1"; 
  
           ResultSet rs = st.executeQuery(sql); 
  
           String str = null; 
  
           while (rs.next()) { 
  
              str = rs.getString("u_name"); 
  
           } 
  
           assertEquals("管理员", str); 
  
       } catch (Exception e) { 
  
           e.printStackTrace(); 
  
       } 
  
    } 
  
}

第三步,执行编写好的TestGetOneData.java类,执行成功的结果为下图所示:

不管什么错误导致执行失败时,如下图所示:

显示TestGetOneData.java测试类中的那个方法报出的错,下图所示:

显示测试类在执行失败时,报错的原因是什么,下图所示:

接下来,我来写一个测试类来测试另一个类中的某个方法,也就大家所说的单元测试。以下所示:

5,  以接本文档中的第五页的第4步,在红框中有Name:输入框里填写上测试类的名称,如:TestAccount,在下个红框中有Class under test:点击输入框后的Browse按钮,如下图所示:

 

 

6,  在上图上选中要测试的类,点击OK按钮,返回到下图所示的弹出框。

7,  点击Next按钮,如下图所示:

8,  选中要测试的类中的测试的方法,如此例为:要测试为Account.java类中的abs(int)和addition(int,int)等两方法,点击Finish按钮即可, TestAccount.java测试类就创建完成了,经过我编写了一些代码到TestAccount.java测试类中,最终TestAccount.java代码如下所示:

要测试的类Account.java代码:

package com.whh.test.process.test; 
  
 
/** 
  
 * 算术计算的应用算法 
  
 *  
  
 * @author wanghonghai 
  
 *  
  
 */ 
  
public class Account { 
  
 
    /** 
  
     * 取一个数的绝对值 
  
     *  
  
     * @param n 
  
     * @return 
  
     */ 
  
    public static int abs(int n) { 
  
       return n > 0 ? n : (-n); 
  
    } 
  
 
    /** 
  
     * 两个数相加 
  
     *  
  
     * @param m 
  
     * @param n 
  
     * @return 
  
     */ 
  
    public static intaddition(int m, int n) { 
  
       return m + n; 
  
    } 
  
}

测试类TestAccount.java代码:

package com.whh.test.process; 
  
 
import static org.junit.Assert.*; 
  
import org.junit.After; 
  
import org.junit.Before; 
  
importorg.junit.Test; 
  
import com.whh.test.process.test.Account; 
  
 
/** 
  
 * 算术计算的应用算法 
  
 *  
  
 * @author wanghonghai 
  
 *  
  
 */ 
  
public class TestAccount { 
  
 
    @SuppressWarnings("unused") 
  
    private Account account; 
  
 
    @Before 
  
    public void setUp() throws Exception { 
  
       account = new Account(); 
  
    } 
  
 
    @After 
  
    public void tearDown() throws Exception { 
  
    } 
  
 
    @SuppressWarnings("static-access") 
  
    @Test 
  
    public void testAbs() { 
  
       assertEquals(account.abs(-12), 12); 
  
       assertEquals(account.abs(2), 2); 
  
       assertEquals(account.abs(0), 0); 
  
    } 
  
 
    @SuppressWarnings("static-access") 
  
    @Test 
  
    public void testAddition() { 
  
       assertEquals(account.addition(4, 5), 9); 
  
       assertEquals(account.addition(3, 5), 8); 
  
    } 
  
}

在这里我简单介绍一下JUnit核心类:

TestCase + TestSuite + BaseTestRunner = TestResult

以上三个类是JUnit主要核心类,共同产生测试结果。

TestCase(测试用例)­-- 扩展了JUnit的TestCase类的类。它以testXXX方法是形式包含一个或多个测试。

TestSuite(测试集合)-- 一组测试(多个TestCase组合在一起测试)。

TestRunner(测试运行器)-- 实际上指的是任何继承BaseTestRunner的TestRunner的类。也就是说BaseTestRunner是所有TestRunner的超类。

还有四个类紧密配合在一起来完成整个测试。分别是:

Assert – 当条件成立时assert方法保持沉默,当条件不成立时就抛出异常。

TestResult – 包含了在测试中发生的所有错误或者失败。

Test – 可以运行Test并把结果传递给TestResult。

TestListener – 测试中产生的所有事件(开始、结束、错误、失败)会通知TestListener。

下图展示了7个JUnit核心类之间的关系。