Код:
Код: Выделить всё
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));
}
Я либо не могу выдать исключение 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