Вызовите IOException во время чтения файла

У меня есть часть кода, который считывает данные из файла. Я хочу вызвать IOException в этом коде для тестирования (я хочу проверить, выдает ли код корректное пользовательское исключение в этом случае).

Там какой-либо путь состоит в том, чтобы создать файл, который защищен от того, чтобы быть считанным, например? Возможно, контакт с некоторыми проверками безопасности может помочь?

Обратите внимание, что передача названия несуществующего файла не может помочь, потому что FileNotFoundException имеет отдельный пункт выгоды.

Вот часть кода для лучшего понимания вопроса:

    BufferedReader reader = null;
    try {

        reader = new BufferedReader(new FileReader(csvFile));

        String rawLine;
        while ((rawLine = reader.readLine()) != null) {
            // some work is done here
        }

    } catch (FileNotFoundException e) {
        throw new SomeCustomException();
    } catch (IOException e) {
        throw new SomeCustomException();
    } finally {
        // close the input stream
        if (reader != null) {
            try {
                reader.close();
            } catch (IOException e) {
                // ignore
            }
        }
    }
24
задан DixonD 30 August 2017 в 06:36
поделиться

5 ответов

Вы можете использовать библиотеку Mock, например Mockito или Easymock (+ classpath) , чтобы создать объект Mock файла. (более новые библиотеки имеют расширения загрузчика классов, которые позволяют имитировать конкретные классы, такие как File), или могут взаимодействовать с чем-то вроде PowerMock (см. блог) и генерировать макет для вызова конструктора и генерировать соответствующее исключение при вызове .

1
ответ дан 29 November 2019 в 00:21
поделиться

Вы всегда можете выбросить собственное IOException :

throw new IOException("Test IOException");
-1
ответ дан 29 November 2019 в 00:21
поделиться

Если вы можете немного переделать код, чтобы он принимал Reader, а не имя файла, вы можете использовать mocks. С помощью EasyMock вы можете создать макет Reader и настроить его так, чтобы он выбрасывал IOException при вызове любого из его методов. Затем вы просто передаете его в тестируемый метод и смотрите, что происходит :-)

void readFile(Reader reader) throws SomeCustomException {
    try {
        String rawLine;
        while ((rawLine = reader.readLine()) != null) {
            // some work is done here
        }

    } catch (FileNotFoundException e) {
        throw new SomeCustomException();
    } catch (IOException e) {
        throw new SomeCustomException();
    } finally {
        // close the input stream
        if (reader != null) {
            try {
                reader.close();
            } catch (IOException e) {
                // ignore
            }
        }
    }
}

затем код теста:

mockReader = createMock(Reader.class);
expect(mockReader.readLine()).andThrow(
        new IOException("Something terrible happened"));
replay(mockReader);

objectToTest.readFile(reader);
4
ответ дан 29 November 2019 в 00:21
поделиться

Вы можете попробовать создать файл как суперпользователь, а затем прочитать его как стандартный пользователь. Там должны быть проблемы с разрешениями. Или просто выполните команду chmod, если вы работаете в Linux. Вы также можете попробовать поместить его в скрытый / защищенный каталог.

2
ответ дан 29 November 2019 в 00:21
поделиться

Вы можете вызвать это исключение для слишком большого файла.

0
ответ дан 29 November 2019 в 00:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: