java无法让mockito模拟公共类的公共方法
我试图模拟resultstrow对象的getMeasureAggregator()
,但似乎没有成功。我对编写mockito单元测试非常陌生
我希望BuilSQL.formatMeasuer()
转到case 2
:所以我决定做的是模拟行。getMeasureAggregator
以下是我的BuildSQL类:
public class SQLBuilder {
public static String buildSQL(JsonObject requestData, JsonObject queryInfo) throws AcquisitionException {
JsonArray jArray = queryInfo.get("columns").getAsJsonArray();
Set<String> columns = new HashSet<>(jArray.size());
for (int i = 0; i < jArray.size(); i++) {
columns.add(jArray.get(i).getAsString());
}
List<ResultSetRow> selectedRows = new ArrayList<>();
List<ResultSetRow> retrievedRows = null;
retrievedRows = MetaDataProvider.executeMetadataRequest(queryInfo, requestData); // this method returns a collection of RetrievedResultSetRow
for (ResultSetRow retrievedRow: retrievedRows) {
if (//some condition evaluates to true) {
selectedRows.add(retrievedRow);
}
}
String sql = "";
String select = "SELECT ";
for (int i = 0; i < selectedRows.size(); i++) {
ResultSetRow row = selectedRows.get(i);
select += formatMeasure(row.getMeatureName(), row.getMeasureAggregator());
}
select = select.substring(0, select.length() - 1);
return sql;
}
private static String formatMeasure(String measureName, int measureAggregator) {
switch(measureAggregator) {
case 1:
return "sum(\"" + measureName + "\")" + " AS \"" + measureName + "\",";
case 2:
return "COUNT(\"" + measureName + "\")" + " AS \"" + measureName + "\",";
return measureName;
}
}
这是我的ResultStrow类:
public class ResultSetRow {
private final int iRow;
private final int measureAggregator;
public ResultSetRow(JsonObject dimensionMetadata) {
this.iRow = dimensionMetadata.get("ROW").getAsInt();
this.measureAggregator = dimensionMetadata.get("MEASURE_AGGR").getAsInt();
}
public int getMeasureAggregator() {
return measureAggregator;
}
}
这就是我嘲笑的方式
@RunWith(PowerMockRunner.class)
@PrepareForTest({ HanaClientRequestUtils.class, RetrievedResultSetRow.class })
public class HanaSQLBuilderTest {
private ResultSetRow resultSetRow;
private requestData;
private queryInfo
@Test
public void formatMeatureExecuteCase2() throws Exception{
resultSetRow = Mockito.mock(ResultSetRow.class);
PowerMockito.when(resultSetRow.getMeasureAggregator()).thenReturn(2);
String querySQL = HanaSQLBuilder.buildSQL(requestData, queryInfo);
System.out.println(querySQL);
}
}
}
我不知道为什么row.getMeasureAggregator()
不返回2
# 1 楼答案
除了我上面的评论(我是手工编码的,请原谅我的一些错误)。 您可以尝试在buildSQL方法中添加
retrievedRows
作为参数:}
然后提供填充了mock的
retrievedRows
我希望它能引导你们找到解决办法