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核心类之间的关系。