JUnit вызов метода насмешки - PullRequest
0 голосов
/ 26 апреля 2018

Я пишу тест Junit для метода 'methodA', который находится в классе 'classA'. В 'methodA' вызывается другой метод 'methodB' класса 'classB'. «methodB» вызывает мыльный веб-сервис. Я хочу издеваться над этим methodB звонком на мыльный веб-сервис. В этом случае я звоню classA.methodA. Здесь я не нахожу способ, которым во время вызова classB.methodB значение mock должно обновляться. Я просмотрел множество ссылок о Mockito, но все они ссылаются на обновление значения макета только из класса junit. Итак, как я могу передать высмеянное значение их.

@Test
public void junitTest() {
 String arg1 = "arg1";
 classA aObj = new classA();
 aObj.methodA(arg1);
}

public classA {
 public string methodA(String arg1) {
  classB bObj = new classB();
  bObj.methodB();
  //somwthing on arg1
  return result;
 }
}

public classB {
 public list methodB() {
  //web-service call
  return list from web - service.
 }
}

1 Ответ

0 голосов
/ 27 апреля 2018

Я пишу тест Junit для метода methodA, который находится в классе classA

Поскольку вы тестируете модуль methodA из classA, вы должны сосредоточиться на насмешке только по вызову bObj.methodB();. Вы не должны вовлекаться в то, что оно делает или не делает внутренне.

Не вы создаете classB объект в methodA, что не является идеальным сценарием. Вы должны сделать bObj в качестве переменной экземпляра classA с соответствующими геттерами, сеттерами и конструктором.

Затем от вашего класса тестирования установите эту classB зависимость.

Вы должны структурировать свой код и что-то вроде этого:

class classAMicroTest {
    @Test
    public void junitTest() {
        String arg1 = "arg1";
        classA aObj = new classA();

        classB mockedBobj = Mockito.mock(classB.class);
        Mockito.when(mockedBobj.methodB()).thenReturn(new ArrayList<>());
        aObj.setbObj(mockedBobj);

        aObj.methodA(arg1);

        Mockito.verify(mockedBobj, times(1)).methodB());
    }

}

class classA {

    classB bObj;

    public void setbObj(classB bObj) {
        this.bObj = bObj;
    }

    public String methodA(String arg1) {
        bObj.methodB();
        // somwthing on arg1
        return result;
    }

}

class classB {

    public List<String> methodB() {
        return new ArrayList<>();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...