Я пытаюсь узнать, как использовать Mockito, и я повесил трубку на том, как идти о проверке метода на определенном объекте, называемом X раз.Метод проверки Mockito вызывает
У меня есть следующий код теста
verify(record, times(1)).setValue(Mockito.any(String.class),Mockito.any(String.class));
и следующий кусок рабочего кода я пытаюсь проверить
Строка [] s Я настраиваю перебирать
protected String[] columnNames = {"_id", "created_at", "updated_at", "name"};
protected ColumnType[] columnTypes = {ColumnType.INTEGER, ColumnType.TIMESTAMP, ColumnType.TIMESTAMP, ColumnType.TEXT};
и код производства, который находится в петле, итерация через String []
for (int i = 0; i < columnCount; i++) {
if (columnNames[i].equals("_id")) {
record.setId(cursor.getInt(0));
} else {
switch (columnTypes[i]) {
case BOOL:
record.setValue(columnNames[i], cursor.getInt(i));
break;
case TEXT:
record.setValue(columnNames[i], cursor.getString(i));
break;
case INTEGER:
record.setValue(columnNames[i], cursor.getInt(i));
break;
case TIMESTAMP:
record.setValue(columnNames[i], cursor.getLong(i));
break;
case LONG:
record.setValue(columnNames[i], cursor.getLong(i));
break;
case DOUBLE:
record.setValue(columnNames[i], cursor.getDouble(i));
break;
default:
record.setValue(columnNames[i], "");
break;
}
}
}
И это ошибка, я получаю
testDataSourceCanFindRecord (com.test.app.DataSourceTest) Время прошло: 0,081 сек < < < FAILURE! org.mockito.exceptions.verification.TooManyActualInvocations: customer.setValue (,); Требуется 1 раз: -> at com.test.app.DataSourceTest.testDataSourceCanFindRecord (DataSourceTest.java:141) Но был 3 раз. Нежелательные призывание: -> в com.test.core.DataSource.cursorToRecord (DataSource.java:210)
Я ожидаю record.setValue (ключ String, значение String) будет вызываться один раз из-за «имя» в строке []. Что происходит, Mockito регистрирует record.setValue (String key, Long value) как то же самое, что и record.setValue (String key, String value), что неверно. Строка 210 - это setValue в случае TIMESTAMP. Как я могу исправить это?
Как вы создаете «курсор»? Я думаю, было бы намного проще использовать реальный объект 'record' без издевательств и убедиться, что значения верны после установки их из курсора. –
Я издеваюсь над курсором. Я издеваюсь над всем, кроме тестируемого класса DataSource. Я все еще пытаюсь понять, что насмехается, а что нет. – David