【问题标题】:Spring Boot test @Mock annotation doesn't create mock objectSpring Boot 测试 @Mock 注释不会创建模拟对象
【发布时间】:2020-02-17 06:30:47
【问题描述】:

我正在使用带有 JUnit 5 的 Spring Boot 2.1,并且刚刚创建了一个这样的测试:

@RunWith(MockitoJUnitRunner.class)
class UserServiceImplTest {

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

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


    ...

}

问题是 setMockOutput 方法中的两个变量都为空,即使在其他 SO 问题中提到的类上使用了 @RunWith(MockitoJUnitRunner.class) 注释。

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

@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");
        ...
    }


    ...

}

【问题讨论】:

    标签: spring spring-boot junit5


    【解决方案1】:

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

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

    【讨论】:

    • 这个测试没有启动 Spring 容器
    • 不幸的是还是同样的问题。我不需要 Spring 容器,第二个示例工作正常,我只想使用注释。
    • @Vmxes,您确定您使用的是支持 Junit5 的 Mockito 版本吗?应该是mockito-junit-jupitermvnrepository.com/artifact/org.mockito/mockito-junit-jupiter/…
    • @VadymVL,似乎除了错误的类注释之外,我的项目 gradle 缓存需要刷新。感谢您的提示。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2015-04-25
      • 2021-05-28
      • 1970-01-01
      • 2019-11-19
      • 2019-02-17
      • 2015-03-04
      • 1970-01-01
      • 2019-03-31
      • 2019-07-04
      相关资源
      最近更新 更多