我无法获得此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 *'。 –