先給出源文件代碼: 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();
再次運行測試用例,就會出現指望的結果,如圖: