Вызовите бин @Autowire через Mockito - PullRequest
1 голос
/ 16 апреля 2019

У меня есть класс A и класс B. B подключен автоматически в классе A. Теперь я хочу проверить поток, используя mockito.

Таким образом, проблема в том, что когда я пытался смоделировать класс A и B в моем тестовом примере, используя @InjectMock, он идет в класс A, но не вызывает класс B.

Я не хочу издеваться над классом B, который автоматически подключен в классе A, из A он должен позвонить в класс B и получить данные о пользователе.

@Component
public class A {

    @Autowired
    private B b;

    public Users getUsers() {
        Long id = 10;
        b.getUserDetails(id);
// some Logic 

    }

}

@Component
public class B {

    public UserDetails getUserDetails(Long id) {
        // some logic to get users details .. 
    }
}


@RunWith(MockitoJUnitRunner.class)
public class TestA {

    @InjectMocks
    private A a;

    @InjectMocks
    private B b;


    @Test
    public void testA() {
        Users actual = a.getUsers();

        assertEquals(actual, expected());
        assertNotNull(actual);

    }

    private Users expected() {
        return new Users(); // expected users object 
    }


}

Ответы [ 2 ]

2 голосов
/ 16 апреля 2019

Вы должны использовать @ Spy на B, чтобы использовать настоящий B класс

@Spy
private B b;

, чтобы шпион окутывал существующий экземпляр.Он по-прежнему будет вести себя так же, как и обычный экземпляр, с той лишь разницей, что он также будет оснащен инструментами для отслеживания всех взаимодействий с ним.

0 голосов
/ 16 апреля 2019

Вы должны изменить @ InjectMocks аннотацию выше B на @ Spy , и вы должны добавить @ Spy выше A.Потому что вы хотите использовать реальные методы B.class и A.class .Почему вам нужно использовать @ Spy ?

Если вы используете @ Mock , по умолчанию для всех методов mock возвращает null, пустую коллекцию или соответствующий примитив / примитивзначение оболочки (например, 0, false, null, ...)

Если вы используете @ Spy , то вызываются реальные методы (если метод не был заглушен).

В результате ваше создание в TestA.class должно выглядеть следующим образом:

@ Spy @InjectMocks private A a;

@Spy частный B b;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...