Как мы можем избавиться от объекта с помощью mockito

Я пытаюсь создать тест JUnit для своего метода. у меня есть метод

public a(int a, int b){
    a.setA(12);
    Injec inj = new Injec();
    inj.check();
    return (a*b);
}

Я хочу пропустить этот раздел, потому что он использует HTTP-запрос.

Injec inj = new Injec();
inj.check();

я использую

when(Matchers.<Injec> anyObject().check()).thenReturn(null);

Но это дает мне исключение


person vs7    schedule 27.11.2015    source источник
comment
Можете ли вы показать исключение, которое вы получаете?   -  person Karl Gjertsen    schedule 27.11.2015
comment
Аргумент, который вы передаете when, должен быть макетом или шпионом, а не сопоставителем, поэтому это не сработает. Я написал статью о создании фиктивных объектов несколько лет назад на вики Mockito. . Вы можете найти это полезным для того, чего вы пытаетесь достичь здесь.   -  person Dawood ibn Kareem    schedule 28.11.2015


Ответы (2)


С Mockito вы не сможете сделать это с вашим текущим кодом.

Проблема в том, что метод a сам создает новый объект Injec, напрямую вызывая конструктор по умолчанию. У Mockito нет возможности издеваться над этим новым экземпляром, поскольку он не может его контролировать.

Таким образом, вам необходимо провести рефакторинг вашего кода. Есть пара возможных решений:

  • передать экземпляр Injec в качестве параметра методу a. Таким образом, вы можете смоделировать экземпляр и смоделировать метод.
  • внедрить экземпляр Injec в свой класс (например, с помощью внедрения конструктора).

Если вы используете JMockit, как отметил @Rogério, это возможно, и вам просто нужно добавить @Mocked Injec в свой тестовый класс. и экземпляр Injec будет высмеиваться при его создании.

person Tunaki    schedule 27.11.2015
comment
Вот почему был изобретен Inversion of Control: stackoverflow.com/questions/9403155/ - person Guillaume F.; 27.11.2015

Используя JMockit, вы можете имитировать свой Injec класс следующим образом:

@RunWith(JMockit.class)
public class MyTest
{
    private ClassToTest underTest;

    @Test
    public void testA(@Mocked Injec injec) {
        underTest.a(10, 20);

        // your assertions
    }
}
person Pith    schedule 30.11.2015