Spring Boot测试@Mock注释不会创建模拟对象

时间:2019-10-21 07:33:08

标签: spring spring-boot junit5

我将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)方法中两个变量都为null。

如果我像下面的代码一样手动创建模拟,那么它将正常工作:

@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 个答案:

答案 0 :(得分:3)

MockitoJUnitRunner与JUnit 5不兼容。 您需要使用@ExtendWith(MockitoExtension.class)代替它。 此类位于依赖项中:

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-junit-jupiter</artifactId>
    <scope>test</scope>
</dependency>

答案 1 :(得分:0)

在JUnit 5中使用Mockito注释要求您调用MockitoAnnotations.initMocks(this);。测试方法运行之前。尝试将其添加到@BeforeEach方法中,然后查看它是否有效。有关MockitoAnnotations的更多信息,请点击:https://static.javadoc.io/org.mockito/mockito-core/2.2.28/org/mockito/MockitoAnnotations.html