java - mockrunner jdbc - 结果集中没有列/行

标签 java unit-testing jdbc mockrunner

我第一次尝试使用mockrunner 设置测试。连接已建立,但我只得到一个空结果集。这是精简的工作示例:

import com.mockrunner.jdbc.BasicJDBCTestCaseAdapter;
import com.mockrunner.jdbc.StatementResultSetHandler;
import com.mockrunner.mock.jdbc.MockResultSet;

public class ExtractDataTest extends BasicJDBCTestCaseAdapter {
    @Test
    public void test() throws Exception {
        StatementResultSetHandler statementHandler = getJDBCMockObjectFactory()
                .getMockConnection().getStatementResultSetHandler();
        MockResultSet resultMock = statementHandler.createResultSet();
        resultMock.addColumn("ID", new Object[]{"1"});
        resultMock.addColumn("USERNAME", new Object[]{"foobar"});
        statementHandler.prepareGlobalResultSet(resultMock);

        Connection con = DriverManager.getConnection( "a", "b", "c");
        System.out.println(con); //com.mockrunner.mock.jdbc.MockConnection@29d8a2c5
        PreparedStatement stmtObjects = con.prepareStatement(
                  "SELECT * FROM USER");
        ResultSet rs = stmtObjects.executeQuery();
        System.out.println(rs); // empty result set
        System.out.println(this.getExecutedSQLStatements()); // []
    }
}

预期输出是包含“1”和“foobar”的结果集,以及执行的 SQL 语句。

最佳答案

您需要使用PreparedStatementResultSetHandler。

这是测试的有效修改版本:

@Test
public void test() throws Exception {
    PreparedStatementResultSetHandler statementHandler = getJDBCMockObjectFactory()
            .getMockConnection().getPreparedStatementResultSetHandler();
    MockResultSet resultMock = statementHandler.createResultSet();
    resultMock.addColumn("ID", new Object[]{"1"});
    resultMock.addColumn("USERNAME", new Object[]{"foobar"});
    statementHandler.prepareGlobalResultSet(resultMock);

    Connection con = DriverManager.getConnection( "a", "b", "c");
    PreparedStatement stmtObjects = con.prepareStatement(
            "SELECT * FROM USER");
    ResultSet rs = stmtObjects.executeQuery();
    assertTrue(rs.next());
    //System.out.println(rs); 
    //System.out.println(getExecutedSQLStatements()); 
    verifySQLStatementExecuted("SELECT * FROM USER");
}

关于java - mockrunner jdbc - 结果集中没有列/行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28676123/

相关文章:

postgresql - 当一行有一个外键到另一行时,如何原子地写入两行?

java - 下面的 java 行用分配给列表的 final 修饰符表示什么?

java - 如何将变量从一个方法(具有参数)传递给main方法?

java - Android SDK 版本 23.6

java - 什么时候调用 robot.cleanUp() 合适

Spring JdbcTemplate/NamedParameterJdbcTemplate 将空值作为参数值传递

java - 用于 Java 的 SQL 服务器 stub

java - Mysql JDBC 驱动程序 ClassNotFoundException

java - 我的mockito模拟如何使用更改的参数调用原始方法?

ios - XCode 9 缺少 CoreSimulator.framework