Как провести модульное тестирование блока catch, который не генерирует никаких исключений - PullRequest
0 голосов
/ 10 июля 2020

Вот мой код.

    @Override
    public KinesisEvent handleRequest(@NonNull KinesisEvent kinesisEvent, @NonNull Context context) {
        KinesisEvent kinesisEventReturn = kinesisEvent.clone();
        final List<KinesisEvent.KinesisEventRecord> transformedRecords = kinesisEventReturn.getRecords().stream().map(
                record -> {
                    try {
                        return decryptLog(record);
                    } catch (IOException e) {
                        log.error("Decryption did not work. See exception: ", e);
                    }
                    return record;
                }).collect(Collectors.toList());
        kinesisEventReturn.setRecords(transformedRecords);
        return kinesisEventReturn;
    }

Если вы видите, у меня есть блок catch, который перехватывает исключение, но не генерирует исключение. Я хотел протестировать блок catch в модульном тестировании. Но все примеры, которые я нахожу, предназначены для проверки того, выбрано ли исключение или нет.

Пожалуйста, помогите, если с этим можно справиться.

Спасибо, Dhrubo

1 Ответ

1 голос
/ 10 июля 2020

Ваша функция проходит через Коллекцию (поток), пытается расшифровать каждую запись и создает список каждой дешифрованной записи, которую она возвращает. Если расшифровка завершается неудачно, создается сообщение журнала, и вместо него в список добавляется исходная запись.

Вы можете использовать тот факт, что если выполняется блок catch, член kinesisEventReturn.getRecords () будет в возвращенном списке. Итак, ваш тестовый пример требует создания входных данных, которые, как известно, заставляют decryptLog(record) генерировать IOException.

Когда IOException выбрасывается / захватывается, результат функции будет иметь по крайней мере один член из ввод Collection. Вы можете использовать Collections.disjoint , чтобы упростить этот тест:

if (! Collections.disjoint(result, kinesisEventReturn.getRecords()) {
    // Test failed

при условии, что расшифрованные записи всегда отличаются от зашифрованных записей.

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