我無法獲得此JUnit測試通過爲我的生活。有人可以指出哪裏出了問題。我正在進行數據遷移(MSSQL SERVER 2005),但我將sourceDBUrl和targetDCUrl設置爲相同的URL,以便將其縮小爲語法錯誤。所以這就是我所知道的一個語法錯誤。我正在比較查詢的結果JAVA-SQL-數據遷移 - ResultSets比較失敗的JUnit測試
SELECT programmeapproval, resourceapproval FROM tr_timesheet WHERE timesheetid = ?
並且測試總是失敗,但是通過了我開發的其他junit測試。我創建了3個diffemt resultSetsEqual方法,但都沒有工作。但是,我開發的一些其他JUnit測試已通過。查詢:
SELECT timesheetid,programmeapproval,resourceapproval FROM tr_timesheet
返回三列
- timesheetid(PK,INT,不爲空)(填充了的範圍內的 號碼2240-2282)
- programmeapproval(smalli NT,NOT NULL)(在各個領域與 1號填充)
- resourceapproval(SMALLINT,不爲空)(在各個領域與多家 1填充)
當我運行查詢它嵌入在代碼中,它只返回具有programmeapproval和resourceapproval列的一行,並且兩個字段都填充了數字1.
我已經正確安裝並測試了所有jdbc驅動程序的連接性。根據IDE,此時JUnit測試失敗。
assertTrue(helper.resultSetsEqual2(sourceVal,targetVal));
這是代碼:
/* 這是一個有JUnit類 ****?
package a7.unittests.dao;
import static org.junit.Assert.assertTrue;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Types;
import org.junit.Test;
import artemispm.tritonalerts.TimesheetAlert;
public class UnitTestTimesheetAlert {
@Test
public void testQUERY_CHECKALERT() throws Exception{
UnitTestHelper helper = new UnitTestHelper();
Connection con = helper.getConnection(helper.sourceDBUrl);
Connection conTarget = helper.getConnection(helper.targetDBUrl);
PreparedStatement stmt = con.prepareStatement("select programmeapproval, resourceapproval from tr_timesheet where timesheetid = ?");
stmt.setInt(1, 2240);
ResultSet sourceVal = stmt.executeQuery();
stmt = conTarget.prepareStatement("select programmeapproval, resourceapproval from tr_timesheet where timesheetid = ?");
stmt.setInt(1,2240);
ResultSet targetVal = stmt.executeQuery();
assertTrue(helper.resultSetsEqual2(sourceVal,targetVal));
}}
/*END* */
/* 這是一個常規CLASS **/
package a7.unittests.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
public class UnitTestHelper {
static String sourceDBUrl = "jdbc:sqlserver://127.0.0.1:1433;databaseName=a7itm;user=a7user;password=a7user";
static String targetDBUrl = "jdbc:sqlserver://127.0.0.1:1433;databaseName=a7itm;user=a7user;password=a7user";
public Connection getConnection(String url)throws Exception{
return DriverManager.getConnection(url);
}
public boolean resultSetsEqual3 (ResultSet rs1, ResultSet rs2) throws SQLException {
int col = 1;
//ResultSetMetaData metadata = rs1.getMetaData();
//int count = metadata.getColumnCount();
while (rs1.next() && rs2.next()) {
final Object res1 = rs1.getObject(col);
final Object res2 = rs2.getObject(col);
// Check values
if (!res1.equals(res2)) {
throw new RuntimeException(String.format("%s and %s aren't equal at common position %d",
res1, res2, col));
}
// rs1 and rs2 must reach last row in the same iteration
if ((rs1.isLast() != rs2.isLast())) {
throw new RuntimeException("The two ResultSets contains different number of columns!");
}
}
return true;
}
public boolean resultSetsEqual (ResultSet source, ResultSet target) throws SQLException{
while(source.next())
{
target.next();
ResultSetMetaData metadata = source.getMetaData();
int count = metadata.getColumnCount();
for (int i =1; i<=count; i++)
{
if(source.getObject(i) != target.getObject(i))
{
return false;
}
}
}
return true;
}
public boolean resultSetsEqual2 (ResultSet source, ResultSet target) throws SQLException{
while(source.next())
{
target.next();
ResultSetMetaData metadata = source.getMetaData();
int count = metadata.getColumnCount();
for (int i =1; i<=count; i++)
{
if(source.getObject(i).equals(target.getObject(i)))
{
return false;
}
}
}
return true;
}
}
/END ** */
/* 粘貼類新 - 這是一個JUNIT測試類 */
package a7.unittests.dao;
import static org.junit.Assert.*;
import java.sql.Connection;
import java.sql.DriverManager;
import org.junit.Test;
public class TestDatabaseConnection {
@Test
public void testConnection() throws Exception{
UnitTestHelper helper = new UnitTestHelper();
Connection con = helper.getConnection(helper.sourceDBUrl);
Connection conTarget = helper.getConnection(helper.targetDBUrl);
assertTrue(con != null && conTarget != null);
}
}
/* * END ***/
失敗,斷言錯誤? – bellum
今後,請僅包含與您手邊的問題相關的代碼 - 您粘貼得太多。其他說明:在Java中,您可以與'=='或'!='進行比較的唯一方法是整型(包括char),布爾值和引用。從JUnit 4.0開始(你似乎正在使用),測試類和「常規」類沒有區別;因此,不需要在測試/驗證代碼中引發異常(反正這會造成誤導)。總是嘗試根據你實際驗證的內容('assertNotNull()')來使用最合適的'assert *'。 –