首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用mockito框架为VoltDb表和VoltDb结果编写mock?

如何使用mockito框架为VoltDb表和VoltDb结果编写mock?
EN

Stack Overflow用户
提问于 2019-08-22 19:24:56
回答 1查看 123关注 0票数 1

我需要使用mockito框架为VoltDb过程编写测试用例。数据库以表的数组形式返回,我需要使用索引号从表中获取表,然后迭代行以从列中获取值。因此,如果我能得到一个关于模拟voltdb连接、表和结果的示例,那就太好了。

代码语言:javascript
复制
Client voltDbClient;

@Mock
DAOFactory daoFactory;

@Test
public void testGetECMPWaitOverSelect() throws Exception {
    String procedure = "Procedure Name is here";
    int offset = PropertiesLoader.getIntValue(PropertiesLoader.OFFSET);
    int fetchlimit = PropertiesLoader.getIntValue(PropertiesLoader.WAITOVER_FETCH_LIMIT);
    Mockito.when(voltDbClient.callProcedure(procedure, offset,fetchlimit)).thenReturn(voltDbClient.callProcedure(procedure, offset, fetchlimit));

    VoltTable[] voltTable = voltDbClient.callProcedure(procedure, offset, fetchlimit).getResults();     

    Mockito.verify(voltDbClient,Mockito.times(1)).callProcedure(procedure, offset, fetchlimit);
}

当类被模拟并验证是否执行了db过程时,我期望这个表会得到模拟的结果,但因为这不是正确的方法,所以我没有得到适当的结果。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-17 22:40:20

在when(funcA()).thenReturn(funcA())中,您似乎返回了相同的函数调用。

你可能需要更多这样的东西:-

代码语言:javascript
复制
        when(client.callProcedure("FOO.select", id)).thenReturn(new ClientResponse() {
        @Override
        public byte getStatus() {
            return ClientResponse.SUCCESS;
        }

        @Override
        public byte getAppStatus() {
            return 0;
        }

        @Override
        public VoltTable[] getResults() {
            VoltTable statusRow = new VoltTable(
                new VoltTable.ColumnInfo("StatusId", VoltType.INTEGER),
                new VoltTable.ColumnInfo("LAST_UPDATED", VoltType.TIMESTAMP),
                new VoltTable.ColumnInfo("VAL", VoltType.STRING)
            );
            statusRow.addRow(1, new TimestampType(new Date()), "Hello again");
            return new VoltTable[]{statusRow};
        }

        @Override
        public String getStatusString() {
            return null;
        }

        @Override
        public String getAppStatusString() {
            return null;
        }

        @Override
        public int getClusterRoundtrip() {
            return 0;
        }

        @Override
        public int getClientRoundtrip() {
            return 0;
        }

        @Override
        public long getClientRoundtripNanos() {
            return 0;
        }
    });
    response = client.callProcedure("FOO.select", id);
    VoltTable t = response.getResults()[0];
    assertEquals(t.getRowCount(), 1);
    t.advanceRow();
    long lastUpdatedMicros = t.getTimestampAsLong("LAST_UPDATED");
    long initialDateMicros = initialDate.getTime() * 1000;
    assertTrue(lastUpdatedMicros > initialDateMicros);
    String latestVal = t.getString("VAL");
    assertEquals(latestVal, val);

抱歉,这是一个非常晚的回复,但也许这可能会对您或其他人有帮助,正如评论中所述,确实提出了一个问题:您正在尝试测试什么。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57608277

复制
相关文章

相似问题

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