junit進行單元測試

先給出源文件代碼: java

數據持久層組件:UserInfo.java  //用戶實體類 sql

 

package com.lyq.model;

 public class UserInfo {
	 
 private int  id;
 private String account;
 private String password;
 
 public int getId() {
	return id;
 }
 public void setId(int id) {
	this.id = id;
 }
 public String getAccount() {
	return account;
 }
 public void setAccount(String account) {
	this.account = account;
 }
 public String getPassword() {
	return password;
 }
 public void setPassword(String password) {
	this.password = password;
 }
 
}

數據訪問層組件:UserInfoDAO.java  //文件有一個添加用戶的方法 int addUserInfo(UserInfo userInfo); 單元測試

 

package com.lyq.dao;
import java.sql.PreparedStatement;
import java.sql.Connection;
import com.lyq.model.UserInfo;
import java.sql.ResultSet;
public class UserInfoDAO {
    Connection conn=null;
    ResultSet rs=null;
    static UserInfoDAO userInfoDAO=null;
    public static UserInfoDAO getUserInfoDAO(){
    	if(userInfoDAO==null)userInfoDAO=new UserInfoDAO();
    	return userInfoDAO;
    }
	public int addUserInfo(UserInfo userInfo){
		conn=DBCon.getConn();
		int i=-1;
		try{
		String sql="insert into tb_userinfo(account,password) values(?,?)";
		PreparedStatement pstmt=conn.prepareStatement(sql);
		pstmt.setString(1, userInfo.getAccount());
		pstmt.setString(2, userInfo.getPassword());
		i=pstmt.executeUpdate(sql); //此處方法調用錯誤,因此程序會出現異常
		}catch(Exception e){
			e.printStackTrace();
		}
		return i;
	}
}

下面開始進入單元測試,配置junit測試環境在此就不說了; 測試

右擊要進行測試的java類UserInfoDAO.java, this

在彈出的對話框中選擇setUp()和trearDown()方法,如圖: code

單擊「Next」,在彈出的對話框中選擇要測試的方法addUserInfo(UserInfo),如圖: get

單擊「Finish",就會生成下面的測試用例文件 UserInfoDAOTest.java,如圖: it

在此處重寫setUp()、tearDown()和testAddUserInfo()方法,重寫後的文件以下: io

 

package com.lyq.dao;

import static org.junit.Assert.*;

import com.lyq.model.UserInfo;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class UserInfoDAOTest {
	 UserInfoDAO userInfoDAO=null;
	 UserInfo userInfo=null;
	@Before
	public void setUp() throws Exception {
			userInfoDAO=UserInfoDAO.getUserInfoDAO();
			userInfo=new UserInfo();
			userInfo.setAccount("xiaoxiao");
			userInfo.setPassword("xiaohai");
			
	} @After public void tearDown() throws Exception {
		userInfoDAO=null;
	} @Test public void testAddUserInfo() {
		//fail("Not yet implemented");
		assertEquals("測試testAddUserInfo()方法失敗!",userInfoDAO.addUserInfo(userInfo),1);
	}

}

上述代碼中的assertEquals()方法是org.junit.Assert類中的靜態方法。其用法以下: class

assertEquals(String message,String expected,String actual)

其中,參數message表示斷言失敗的信息,能夠省略;expected表示指望的數據;actual表示實際的數據。assertEquals()方法用來斷言expected表示的數據與actual表示的數據相等,若不等,則拋出異常並輸出message表示的提示信息。

運行測試用例,結果如圖:

提示錯誤:指望值應爲-1,但實際值爲1.

如今把UserInfoDAO.java文件中addUserInfo(UserInfo userInfo)方法中的那條錯誤語句改正過來;

改成:i=pstmt.executeUpdate();

再次運行測試用例,就會出現指望的結果,如圖:

相關文章
相關標籤/搜索