2017-06-10 38 views
1

我正在測試兩個準備好的語句,如下所示,我希望它使用assertEquals表明它們是相同的,但是它拋出了一個錯誤,表明result和expectedResult是不等於。Junit使用assert方法比較兩個預準備語句

public PreparedStatement setSQL(String sql) throws SQLException { 

try { 

pst = connection.prepareStatement(sql); 

} catch (SQLException e) { 

e.printStackTrace(); 

} 

return pst; 

} 


public void testSetSQL() throws SQLException { 

     String sql = "SELECT * FROM student INNER JOIN member ON student.ssn=member.ssn WHERE ssn = ?"; 

     result = dbconn.setSQL(sql); 

     // expsql = ; 

     expectresult = connection.prepareStatement("SELECT * FROM student INNER JOIN member ON student.ssn=member.ssn WHERE ssn = ?"); 

     assertSame(expectresult, result); 

回答

0

參考this SO Question及其答案明白assertSame手段。它檢查兩個對象引用的相等性,這對您的代碼來說肯定不是這樣,因爲兩個不同的connection.prepareStatement(...)調用會給你兩個不同的引用/對象。

我不知道怎麼做的PreparedStatement作品平等,你可以查看其源代碼equals()方法(PreparedStatement簡直就是JDK的接口,它的實現是通過驅動程序供應商提供),並看到assertEquals是你所需要的。

您的代碼按預期工作。

prepareStatement(java.lang.String)報價,

返回: 包含預編譯的SQL語句

+0

一個新的默認PreparedStatement對象無處是'PreparedStatement'記載有值相等語義。 –