当前位置: 首页 > 知识库问答 >
问题:

是否有一种方法可以修复一个应该返回由ResultSet组成的字符串的测试?

郑锦
2023-03-14

我有一个从结果集创建字符串的函数。和发送信息的那个。你可以在下面看到他们

public String createStringReport(ResultSet resultSet) throws SQLException{
    StringBuilder reportData = new StringBuilder("");
    int columns = 0;
    if(resultSet.getMetaData() != null) {
        columns = resultSet.getMetaData().getColumnCount();
        while (resultSet.next()) {
            for (int i = 1; i <= columns; i++) {
                reportData.append(resultSet.getString(i)).append("\t");
            }
            reportData.append("\n");
        }
    }
    return !reportData.toString().isEmpty() ? reportData.toString() : "No data";
}

private void sendStringReport(String reportData) {
    for (User u: users) {
        sender.send(u, reportData);
        log.info("send report - " + report.getName() + " to" + u.getName());
    }
}

我需要编写一个测试,它调用sender与参数字符串,这是以前生成的。这就是我现在所拥有的:

@Test
public void shouldGenerateStringReportWhenThreadRunHasData() throws SQLException {
    String result = "somestring";
    Report report = getReport(ReportType.STRING);
    ReportCreator reportCreator = new
            StringReportCreator(report, users, sender, dataSource, unexpectedErrorCounter);

    when(resultSet.getString(anyInt())).thenReturn(result);

    when(resultSet.next()).thenReturn(true).thenReturn(false);
    int columns = 2;
    final ResultSetMetaData rsmd = mock(ResultSetMetaData.class);
    when(resultSet.getMetaData()).thenReturn(rsmd);
    doReturn(rsmd).when(resultSet).getMetaData();

    StringBuilder reportData = new StringBuilder("");
    if(resultSet.getMetaData() != null) {
        while (resultSet.next()) {
            for (int i = 1; i <= columns; i++) {
                reportData.append(result).append("\t");
            }
            reportData.append("\n");
        }
    }

    reportCreator.run();
    verify(sender, Mockito.times(users.size())).send(any(User.class), eq(reportData.toString));
}
Argument(s) are different! Wanted:
telegramSender.send(
    <any reportbot.entity.User>,
    "somestring somestring  
somestring  somestring  
"
);
-> at ru.phoenixdnr.reportbot.ReportCreatorTest$Run.shouldGenerateStringReportWhenThreadRunHasData(ReportCreatorTest.java:233)
Actual invocations have different arguments:
telegramSender.send(
    User(id=1, idTelegram=2, name=892e0f69-c10e-4961-b22e-11de333fbb55, email=73507828-9c7a-4026-8599-5e6c8c62e3c7),
    "No data"
);

为什么reportData是空的?我怎么才能修好这个?我已经试了一个星期了,但没有任何帮助。

共有1个答案

阴飞星
2023-03-14

您错过了对ResultSetMetadataGetColumnCount调用的模拟:

when(rsmd.getColumnCount()).thenReturn(2);
 类似资料:
  • 问题内容: 一种有效的方法来检查Python中的字符串是否仅包含一个字符,例如?像这样的行为: 两种看似效率低下的方法是:首先将字符串转换为列表并检查每个元素,其次使用正则表达式。有没有更有效的方法,或者这些是Python中最好的方法?谢谢。 问题答案: 到目前为止,这是最快的,甚至比它快几倍,只需使用出色的mgilson计时套件即可: 在这里,所有检查都是在Python C代码中完成的,它只是:

  • 我正在设计一个用Go编写的gRPC服务。 gRPC服务前面是特使,它将传入的HTTP请求转换为gRPC,并将gRPC响应转换为JSON。 此应用程序的要求是有一个返回以下JSON对象的endpoint: 我可以在Go中非常简单地建模这个响应,如下所示: 但我的要求是,有时我的_id可能是空的。在这种情况下,我想找回以下JSON: 信息技术 是否可以修改,使可以是返回的JSON对象中的字符串或空值?

  • 几个月前,我参加了纽约一家对冲基金公司的面试,不幸的是,我没有得到数据/软件工程师的实习机会。(他们还要求解决方案使用Python。) 我在第一个面试问题上搞砸了... 000-->999 现在我在考虑,我认为不可能想出一个常数时间的算法。是吗?

  • 在Spock规范中,expect:或then:block中的任何行都被计算并断言为,除非它具有返回类型为的签名。 方法在类中定义如下: 我故意在那里断言,这样它就不会失败。即使失败并出现错误: 如何以及为什么方法调用结果被计算为?

  • 本文向大家介绍PHP判断一个字符串是否是回文字符串的方法,包括了PHP判断一个字符串是否是回文字符串的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP判断一个字符串是否是回文字符串的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的php程序设计有所帮助。

  • 问题内容: Java的UUID类生成随机的UUID。但这由字母和数字组成。对于某些应用,我们只需要数字。有没有一种方法可以生成仅由Java中的数字组成的随机UUID? 问题答案: 如果您不想使用随机数,但是带有数字的UUID仅使用: 在这种情况下,左填充为40个零… 结果为: UUID:b55081fa-9cd1-48c2-95d4-efe2db322a54 in: UUID:0241008287