Модульное тестирование IOException с Java, JUnit и MockitoJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Модульное тестирование IOException с Java, JUnit и Mockito

Сообщение Anonymous »

У меня возникли проблемы с тестированием или имитацией исключения IOException при использовании Reader.
Код:

Код: Выделить всё

public class Loader {
public static void load(Reader reader) {
try (BufferedReader bufferedReader = new BufferedReader(reader)) {
bufferedReader.lines();
} catch (IOException e) {
throw new RuntimeException("", e);
}
}
}

@Test
void testLoadEnvironmentVariablesWithIOException() throws IOException {
BufferedReader bufferedReader = mock();

when(bufferedReader.readLine()).thenThrow(new IOException(""));

assertThrows(RuntimeException.class, () -> Loader.load(bufferedReader));
}
Я пробовал все — Reader, BufferedReader,lines(), read(), read(char[]), read(any()) и т. д., но ничего не работает.
Я либо не могу выдать исключение IOException в методе, поскольку этот конкретный метод не выдает исключение этого типа, например, он бы выдал исключение UncheckedIOException, либо тест просто зависает бесконечный цикл и даже не заканчивается во время во время выполнения.
Но в этом примере это работает (с использованием com.opencsv.CSVReader):

Код: Выделить всё

public class Loader {
public static void load(Reader reader) {
try (CSVReader csvReader = new CSVReader(reader)) {
csvReader.readAll().stream();
} catch (IOException | CsvException e) {
throw new IllegalArgumentException("", e);
}
}
}

@Test
void testLoadWithIOException() throws IOException {
BufferedReader reader = mock();

when(reader.readLine()).thenThrow(new IOException(""));

assertThrows(IllegalArgumentException.class, () -> BookLoader.load(reader));
}
Вероятно, дело в том, как читатели обертывают друг друга и как они используют внутренний читатель, но я потратил слишком много времени на поиск исходного кода и не смог найти метод, который можно было бы имитировать, чтобы сделать тест выполняется правильно.
Я также не хочу использоватьockStatic или Java Reflection, потому что очевидно, что есть более простой и простой способ с другим типом чтения. обертка, но я просто не могу найти способ сделать это работайте в первом примере.

Подробнее здесь: https://stackoverflow.com/questions/793 ... nd-mockito
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»