Тест Spring Boot Аннотация @Mock не создает фиктивный объект - PullRequest
0 голосов
/ 21 октября 2019

Я использую Spring Boot 2.1 с JUnit 5 и только что создал тест вроде этого:

@RunWith(MockitoJUnitRunner.class)
class UserServiceImplTest {

    @Mock
    private AppProperties appProperties;
    @Mock
    private UserAccountService userAccountService;

    @BeforeEach
    void setMockOutput() {
        when(appProperties.getPort()).thenReturn("8088");
        ...
    }


    ...

}

Проблема в том, что обе переменные равны нулю в методе setMockOutput, даже если @RunWith(MockitoJUnitRunner.class)аннотации используются в классе, как упоминалось в других вопросах SO.

Если я создаю макеты вручную, как показано в коде ниже, тогда он работает нормально:

@RunWith(MockitoJUnitRunner.class)
class UserServiceImplTest {

    private AppProperties appProperties;
    private UserAccountService userAccountService;

    @BeforeEach
    void setMockOutput() {
        appProperties = Mockito.mock(AppProperties.class);
        userAccountService = Mockito.mock(UserAccountService.class);

        when(appProperties.getPort()).thenReturn("8088");
        ...
    }


    ...

}

Ответы [ 2 ]

3 голосов
/ 21 октября 2019

MockitoJUnitRunner не совместим с JUnit 5. Вам нужно использовать @ExtendWith(MockitoExtension.class) вместо него. Этот класс находится в зависимости:

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-junit-jupiter</artifactId>
    <scope>test</scope>
</dependency>
0 голосов
/ 06 ноября 2019

Использование аннотаций Mockito в JUnit 5 требует, чтобы вы вызвали MockitoAnnotations.initMocks (this);до запуска метода испытаний. Попробуйте добавить его в метод @BeforeEach и посмотрите, работает ли он тогда. Более подробная информация о MockitoAnnotations здесь: https://static.javadoc.io/org.mockito/mockito-core/2.2.28/org/mockito/MockitoAnnotations.html

...