Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JAVA-SQL-数据迁移-结果集比较失败的JUnit测试_Java_Sql_Jdbc_Data Migration - Fatal编程技术网

JAVA-SQL-数据迁移-结果集比较失败的JUnit测试

JAVA-SQL-数据迁移-结果集比较失败的JUnit测试,java,sql,jdbc,data-migration,Java,Sql,Jdbc,Data Migration,我这辈子都无法通过JUnit考试。有人能指出哪里出了问题吗。我正在进行数据迁移(MSSQL SERVER 2005),但我将sourceDBUrl和targetDCUrl设置为相同的URL,以便将其缩小到语法错误。这就是我的问题,一个语法错误。我正在比较查询表的结果 SELECT programmeapproval, resourceapproval FROM tr_timesheet WHERE timesheetid = ? 测试总是失败,但通过了我开发的其他junit测试。我创建了3个不

我这辈子都无法通过JUnit考试。有人能指出哪里出了问题吗。我正在进行数据迁移(MSSQL SERVER 2005),但我将sourceDBUrl和targetDCUrl设置为相同的URL,以便将其缩小到语法错误。这就是我的问题,一个语法错误。我正在比较查询表的结果

SELECT programmeapproval, resourceapproval FROM tr_timesheet WHERE timesheetid = ?
测试总是失败,但通过了我开发的其他junit测试。我创建了3个不同的ResultSequal方法,但都不起作用。然而,我开发的其他一些JUnit测试已经通过。查询:

从tr\U时间表中选择时间表、计划审批、资源审批

返回三列

  • timesheetid(主键,整数,非空)(填充范围为 电话号码:2240-2282)
  • programmeapproval(smallint,非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));
}}
/*结束***/

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;
}
}
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);

}
/*这是一门普通课程**/

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;
}
}
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***/

当对象彼此
相等时,您返回了
false
。在这个方法中,我将条件改为
不等于

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;
}
}
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);

}
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))) //added !
             {
                  return false;
             }
        }
    }
    return true;
}
public boolean resultSetsEqual2(ResultSet源、ResultSet目标)抛出SQLException{
while(source.next())
{
target.next();
ResultSetMetaData元数据=source.getMetaData();
int count=metadata.getColumnCount();

对于(int i=1;i当对象彼此
相等时,您返回了
false
。在此方法中,我将条件更改为
不相等

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))) //added !
             {
                  return false;
             }
        }
    }
    return true;
}
public boolean resultSetsEqual2(ResultSet源、ResultSet目标)抛出SQLException{
while(source.next())
{
target.next();
ResultSetMetaData元数据=source.getMetaData();
int count=metadata.getColumnCount();

对于(int i=1;如果出现断言错误?将来,请只包含与当前问题实际相关的代码-粘贴的太多了。其他注意事项:在Java中,唯一可以与
=
!=
比较的是整数类型(包括char)、布尔值和引用。从JUnit 4.0开始(您似乎正在使用的)测试类和“常规”类之间没有区别;因此,没有必要在测试/验证代码中抛出异常(无论如何,这会产生误导)。始终尝试根据您实际验证的内容使用最合适的
assert*
assertNotNull()
,例如)。由于断言错误而失败?将来,请只包含与手头问题实际相关的代码-您粘贴的内容太多了。其他注意事项:在Java中,唯一可以与
=
!=
进行比较的是整数类型(包括char)、布尔值和引用。从JUnit 4.0开始(您似乎正在使用的)测试类和“常规”类之间没有区别;因此,没有必要在测试/验证代码中抛出异常(无论如何,这会产生误导)。始终尝试根据您实际验证的内容使用最合适的
assert*
assertNotNull()
,例如)。是的,这应该是他的问题的根源。您还可以提供一些关于他其余代码状态的其他建议吗(即使只使用此方法)?不要只寻求回答手头的问题,还要寻求启发您的开发伙伴。(顺便说一句,好点,+1)。这真是个小错误,花了这么多时间,非常感谢。我只需要一点同行评议。@user1865053没问题。其他代码也不错。但是不要在
resultsetsqual
中使用
!=
运算符进行对象比较。祝你好运。是的,这应该是他的问题的根源。你能提供一些其他建议吗关于他的其余代码的状态(即使只在这个方法中)?不要只寻求回答手头的问题,还要寻求启发您的开发伙伴。(顺便说一句,好点,+1)。这真是个小错误,花了这么多时间,非常感谢。我只需要一点同行评审。@user1865053没问题。其他代码也不错。但是不要在
结果相等中使用
!=
运算符进行对象比较。祝你好运。