Мокинг метода stati c в абстрактном классе с использованием Mockito - PullRequest
0 голосов
/ 27 мая 2020
public abstract class A {

    public String method1( String urlString ) {
        HTTP HttpURLConnection con = getConnection(url);

        .... I use con.getInpurStream() to get the data and return it...

    }
    public HttpURLConnection getConnection(URL url) {
        URL url = new URL(urlString);
        return (HttpURLConnection) url.openConnection();
    }
}


public class B extends A {
    public String method2(String urlString) {
        return method1(urlString);
    }
}

Я пытаюсь написать модульный тест для метода 2 класса B с использованием JUNIT и Mockito.

Я устал примерно так:

public class testB {
    String urlString = "someValid.url";
    String dummyRes = "dummy Response";
    InputStream res = new ByteArrayInputStream(dummyRes.getBytes());

    B mockB = Mockito.mock(B.class);
    HttpURLConnection connection = Mockito.mock(HttpURLConnection.class);
    Mockito.when(connection.getInputStream()).thenReturn(res);
    Mockito.when(mockB.getConnection(urlString)).thenRetrun(connection);

    assertEquals("dummy Response", mockB.method2("someValid.url");

}

Я продолжаю получение данных в реальном времени с этого URL-адреса вместо dummyRes.

Пожалуйста, помогите / \

Edit1:

Удалены методы stati c. И я все еще не могу издеваться над методом getConnection (), чтобы вернуть фиктивное соединение.

Edit2:

Объект создания URL перемещен в метод getConnection, чтобы избежать создания нового URL, чтобы я мог издеваться он и внес изменения в тест для этого. По-прежнему собирает значения в реальном времени.

Ответы [ 2 ]

0 голосов
/ 27 мая 2020

Методы stati c не могут быть имитированы напрямую, для имитации методов stati c вам необходимо использовать PowerMock поверх Mockito.

Еще одним вариантом может быть использование Jmockit Framework. Это можно использовать вместо использования двух фреймворков (Mockito и PowerMock).

Вот ссылка, почему насмешка над методами stati c не работает с Mockito -

Методы mock stati c с Mockito .

[update]: для фиктивной проблемы подключения

вместо


    Mockito.when(mockB.getConnection(tempURL)).thenRetrun(connection);

попробуйте использовать


    Mockito.when(mockB.getConnection(any())).thenRetrun(connection);

Если вы не используете wi sh для передачи any , альтернативой может быть имитация класса URL вместе с методом openConnection .

0 голосов
/ 27 мая 2020

Вроде должно быть что-то вроде этого

Mockito.when(mockB.getConnection(Mockito.eq("someValid.url" ))).thenReturn(connection);
...