如何使用 mockito 框架为 VoltDb table 和 VoltDb 结果编写模拟?
How to write mocks for VoltDb table and VoltDb results using mockito framework?
我需要使用 mockito 框架为 VoltDb 程序编写测试用例。数据库 returns 作为 table 的数组,我需要使用索引号从中获取 table,然后迭代行以从列中获取值。因此,如果我能获得有关模拟 voltdb 连接的样本,table 和结果会很棒。
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);
}
我预计 table 会得到模拟结果,因为 class 被模拟并验证数据库过程是否已执行,但由于这不是正确的方法,我没有得到适当的结果。
在您的 when(funcA()).thenReturn(funcA()) 中,您似乎返回了相同的函数调用。
您可能需要更多类似的东西:-
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);
抱歉,这是一个很晚的回复,但也许这可能对您或其他人有所帮助,正如评论中所述,确实回避了您要测试什么的问题。
我需要使用 mockito 框架为 VoltDb 程序编写测试用例。数据库 returns 作为 table 的数组,我需要使用索引号从中获取 table,然后迭代行以从列中获取值。因此,如果我能获得有关模拟 voltdb 连接的样本,table 和结果会很棒。
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);
}
我预计 table 会得到模拟结果,因为 class 被模拟并验证数据库过程是否已执行,但由于这不是正确的方法,我没有得到适当的结果。
在您的 when(funcA()).thenReturn(funcA()) 中,您似乎返回了相同的函数调用。
您可能需要更多类似的东西:-
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);
抱歉,这是一个很晚的回复,但也许这可能对您或其他人有所帮助,正如评论中所述,确实回避了您要测试什么的问题。