не может заставить mockito издеваться над публичным методом публичного класса - PullRequest
1 голос
/ 06 мая 2019

Я пытаюсь смоделировать getMeasureAggregator() объекта ResultSetRow - мне не удается.Я очень новичок в написании модульного теста на мокито.

Я хочу, чтобы BuilSQL.formatMeasuer() перешел на case 2: поэтому я решил сделать насмешку row.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;
    }
}

вот мой класс ResultSetRow:

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 Ответ

1 голос
/ 06 мая 2019

В дополнение к моим комментариям выше (я пишу вручную, прости меня за некоторые ошибки).Вы можете попробовать добавить retrievedRows в качестве параметра в свой метод buildSQL:

public static String buildSQL(
    JsonObject requestData,
    JsonObject queryInfo,
    List<ResultSetRow> retrievedRows) throws AcquisitionException {
      // ... rest of Your code adopted to new parameter

}

, а затем предоставить свой retrievedRows, заполненный насмешками

@Test
public void formatMeatureExecuteCase2() throws Exception{
    resultSetRow = Mockito.mock(ResultSetRow.class);
    PowerMockito.when(resultSetRow.getMeasureAggregator()).thenReturn(2);

    List<ResultSetRow> retrievedRowsMock = new ArrayList<>(1);
    retrievedRowsMock.add(resultSetRow);

    String querySQL = HanaSQLBuilder.buildSQL(requestData, queryInfo, retrievedRowsMock);
    System.out.println(querySQL);
    }
}

Я надеюсь, что это приведет вас к решению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...