У меня есть часть кода, который считывает данные из файла. Я хочу вызвать 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
}
}
}
Вы можете использовать библиотеку Mock, например Mockito или Easymock (+ classpath) , чтобы создать объект Mock файла. (более новые библиотеки имеют расширения загрузчика классов, которые позволяют имитировать конкретные классы, такие как File), или могут взаимодействовать с чем-то вроде PowerMock (см. блог) и генерировать макет для вызова конструктора и генерировать соответствующее исключение при вызове .
Вы всегда можете выбросить собственное IOException
:
throw new IOException("Test IOException");
Если вы можете немного переделать код, чтобы он принимал 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);
Вы можете попробовать создать файл как суперпользователь, а затем прочитать его как стандартный пользователь. Там должны быть проблемы с разрешениями. Или просто выполните команду chmod, если вы работаете в Linux. Вы также можете попробовать поместить его в скрытый / защищенный каталог.
Вы можете вызвать это исключение для слишком большого файла.