Junit 5 — макет чтения файлов и внутренние методы библиотекиJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Junit 5 — макет чтения файлов и внутренние методы библиотеки

Сообщение Anonymous »

Я пытаюсь написать модульный тест для этого метода:

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

@Bean
public ApiClient apiClient() throws IOException {
try (FileReader fileReader = new FileReader(kubeConfigPath)) {
final ApiClient client = ClientBuilder.kubeconfig(KubeConfig.loadKubeConfig(fileReader)).build();
final OkHttpClient httpClient = client.getHttpClient().newBuilder()
.readTimeout(0, TimeUnit.SECONDS)
.writeTimeout(WRITE_TIMEOUT_SECONDS, TimeUnit.SECONDS)
.connectTimeout(CONNECT_TIMEOUT_SECONDS, TimeUnit.SECONDS)
.build();
client.setHttpClient(httpClient);
return client;
}
}
Тестовый пример:

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

    @Test
public void testApiClientConfigurations() throws IOException {
FileReader fileReader = Instancio.create(FileReader.class);
KubeConfig kubeConfig = Instancio.create(KubeConfig.class);

OkHttpClient.Builder httpClientBuilder = mock(OkHttpClient.Builder.class);
OkHttpClient httpClient = mock(OkHttpClient.class);

when(KubeConfig.loadKubeConfig(fileReader)).thenReturn(kubeConfig);
when(apiClient.getHttpClient()).thenReturn(httpClient);
when(httpClient.newBuilder()).thenReturn(httpClientBuilder);
when(httpClientBuilder.readTimeout(0, TimeUnit.SECONDS)).thenReturn(httpClientBuilder);
when(httpClientBuilder.writeTimeout(10, TimeUnit.SECONDS)).thenReturn(httpClientBuilder);
when(httpClientBuilder.connectTimeout(10, TimeUnit.SECONDS)).thenReturn(httpClientBuilder);
when(httpClientBuilder.build()).thenReturn(httpClient);
when(apiClient.setHttpClient(httpClient)).thenReturn(apiClient);

//Act
kubernetesConfig.apiClient();
}
Я получаю эту ошибку:

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

java.lang.NullPointerException: Cannot invoke "sun.nio.cs.StreamDecoder.read(char[], int, int)" because "this.sd" is null

at java.base/java.io.InputStreamReader.read(InputStreamReader.java:177)
at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:180)
at org.yaml.snakeyaml.reader.StreamReader.ensureEnoughData(StreamReader.java:173)
at org.yaml.snakeyaml.reader.StreamReader.ensureEnoughData(StreamReader.java:168)
at org.yaml.snakeyaml.reader.StreamReader.peek(StreamReader.java:123)
at org.yaml.snakeyaml.scanner.ScannerImpl.scanToNextToken(ScannerImpl.java:1204)
at org.yaml.snakeyaml.scanner.ScannerImpl.fetchMoreTokens(ScannerImpl.java:320)
at org.yaml.snakeyaml.scanner.ScannerImpl.checkToken(ScannerImpl.java:238)
at org.yaml.snakeyaml.parser.ParserImpl$ParseImplicitDocumentStart.produce(ParserImpl.java:210)
at org.yaml.snakeyaml.parser.ParserImpl.peekEvent(ParserImpl.java:161)
at org.yaml.snakeyaml.parser.ParserImpl.checkEvent(ParserImpl.java:152)
at org.yaml.snakeyaml.composer.Composer.getSingleNode(Composer.java:156)
at org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData(BaseConstructor.java:178)
at org.yaml.snakeyaml.Yaml.loadFromReader(Yaml.java:493)
at org.yaml.snakeyaml.Yaml.load(Yaml.java:446)
at io.kubernetes.client.util.KubeConfig.loadKubeConfig(KubeConfig.java:89)
at config.KubernetesConfigTest.testApiClientConfigurations(KubernetesConfigTest.java:98)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
Я не знаю, как имитировать внутренние методы, используемые в моем методе конфигурации. Это зависимость, которую я использую: https://github.com/kubernetes-client/java

Подробнее здесь: https://stackoverflow.com/questions/788 ... al-methods
Ответить

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

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

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

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

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