Как выполнить модульное тестирование метода класса, который inturn вызывает метод из другого класса - PullRequest
0 голосов
/ 08 мая 2020

Привет, мой класс выглядит так.

public class Class1 {

    public void method1(Object obj) {

        // Class 2 makes the restApiCall and result as "SUCCESS" if the HTTP response is 202
        Class2 class2 = new Class2();
        String result = class2.callRestService();
        System.out.println(result);
    }

}
public class Class2 {

    public String callRestService() {
        String url = fetchUrl(System.getProperty(COnstants.URL);
        String result = callRestServiceAPi(url); // Calling the RestApimethod.
        return result;
    }

}

Я хочу написать модульный тест для class1, и я хочу сделать это, фактически не вызывая RestAPi, что означает, что я хочу имитировать class2.callRestService () для возврата как «успех» или «сбой». Как это сделать.

1 Ответ

1 голос
/ 08 мая 2020

Если вы используете new (а затем не используете инъекцию ), у вас всегда будут проблемы с тестом.

У вас есть две альтернативы:

  1. Используйте PowerMockito
  2. Оберните new в метод и имитируйте метод
public class Class1 {

    protected Class2 getClient(){
         return new Class2();
    }

    public void method1(Object obj) {

        // Class 2 makes the restApiCall and result as "SUCCESS" if the HTTP response is 202
        Class2 class2 = new Class2();
        String result = class2.callRestService();
        System.out.println(result);
    }

}

, а затем в вашем Junit

@Test
public void test(){
    Class1 class1 = Mockito.spy(new Class1());
    Class2 class2 = Mockito.mock(Class2.class);
    Mockito.doReturn("your result").when(class2).callRestService();
    Mockito.doReturn(class2).when(class1).getClient();
    // assert something

}

Подробнее Mockito здесь

...