Mockito test - внедрить в автосервис - PullRequest
0 голосов
/ 12 марта 2019

Я пытаюсь выполнить модульное тестирование службы загрузки Sprint (служба A), которая автоматически подключила другую службу (службу B) как

@Autowired
ServiceB serviceB;

Объявление для модульного теста выглядит следующим образом:

@Mock
private UserRepository userRepository;

@Mock
private ServiceA serviceA;

@InjectMocks
@Autowired
private ServiceB serviceB;

private User user;

и произойдет сбой на

Mockito.when(userRepository.save(any(User.class))).thenReturn(user);
User result = serviceA.upsertUser(user);

, где метод serviceA upsertUser() выглядит так:

user = serviceB.doUpsertUser(user);

Проверка работала нормально, прежде чем я включил объявление ServiceA new пользователяот

user = new ServiceB(userRepository).doUpsertUser(user);

до @Autowired

user = SeviceB.doUpsertUser(user);

Я не уверен, правильно ли я напутал с созданием насмешек и введением насмешек, как это происходит, когда я захожуServiceA, что ServiceB не был объявлен.

1 Ответ

1 голос
/ 13 марта 2019

Я решил свою проблему, выполнив шаги с https://tedvinke.wordpress.com/2014/02/13/mockito-why-you-should-not-use-injectmocks-annotation-to-autowire-fields/ для изменений на ServiceA и ServiceB, но нет никакого способа уйти без @InjectMocks

Мой настроенный тест Mockito выглядиткак:

@Mock
private UserRepository userRepository;

@InjectMocks
private ServiceB serviceB;

private User user;
private ServiceA serviceA;

@Before
public void setUp() {
    this.serviceA = new ServiceA(userRepository, serviceB);
}

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