首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模拟-模拟ReultSet

模拟-模拟ReultSet
EN

Stack Overflow用户
提问于 2018-03-02 05:25:37
回答 1查看 281关注 0票数 0

下面是我正在测试的方法和测试代码。我测试的方法依赖于runExecuteQueryStatement生成的结果集。如果ResultSet为空,resultSet.next为false,它将返回0,否则当resultSet.next返回某个值时,它将返回1。这就是我模拟resultSet的原因,ResultSet.next()。但我仍然得到0作为返回值。任何帮助都将不胜感激。谢谢

测试中的方法

代码语言:javascript
复制
int result = 0;

    try {
        ResultSet resultSet = runExecuteQueryStatement(dbServerConn, "SELECT 1 AS cnt FROM pg_database WHERE datname ='" + dbName + "';");
        while (resultSet.next()) {
            result = resultSet.getInt("cnt");
        }
    }catch(Exception ex) {
        logger.error(ex.getMessage());
    }

    return result;

依赖方法代码(runExecuteQueryStatement)

代码语言:javascript
复制
ResultSet resultSet = null;
    Connection conn = getConnection(dbServerConn);
    Statement stmt = conn.createStatement();
    resultSet = stmt.executeQuery(sqlStatement);

    return resultSet;

测试代码

代码语言:javascript
复制
PostgresDatabaseManager pgManagerMock = Mockito.mock(PostgresDatabaseManager.class);
    DbConnection dbConnectionMock = Mockito.mock(DbConnection.class);

    String sqlStatementMock = SOME_STRING;

    ResultSet resultSetMock = Mockito.mock(ResultSet.class);
    Mockito.when(resultSetMock.next()).thenReturn(TRUE).thenReturn(FALSE);
    Mockito.when(resultSetMock.getInt("cnt")).thenReturn(1);

    Mockito.when(pgManagerMock.runExecuteQueryStatement(dbConnectionMock, sqlStatementMock)).thenReturn(resultSetMock);

    Mockito.when(pgManagerMock.runExecuteQueryStatementWrapperForCheckDBExists(dbConnectionMock, sqlStatementMock)).thenCallRealMethod();

    int actualResult = pgManagerMock.runExecuteQueryStatementWrapperForCheckDBExists(dbConnectionMock, sqlStatementMock);

    int expectedResult = 1;

    Assert.assertEquals(expectedResult, actualResult);
EN

回答 1

Stack Overflow用户

发布于 2018-03-04 02:03:39

参数匹配是问题所在。依赖方法runExecuteQueryStatement有两个参数,其中一个是对象,另一个是字符串。对象可以被模拟,其中字符串是硬编码的。但在实现中,我为同一个方法传递了一个不同的字符串作为参数,因此存根不起作用。我们应该按Matchers.anyString().进行参数匹配,而不是在存根中对字符串值进行硬编码当我们使用匹配器进行方法的参数匹配时。该方法上的所有参数都应该是Matcher。因此,存根适用于所有不同的参数值。

代码语言:javascript
复制
Mockito.when(pgManagerMock.runExecuteQueryStatement(Matchers.anyObject(), Matchers.anyString())).thenReturn(resultSetMock);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49058933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档