【问题标题】:Using SpringRunner with @Mock将 SpringRunner 与 @Mock 一起使用
【发布时间】:2021-03-19 08:00:12
【问题描述】:

我已经读过,使用@Mock时,它应该与@RunWith(MockitoJUnitRunner.class)一起使用,而对于@MockBean,它应该与@RunWith(SpringRunner.class)一起使用。

但是,对于@Mock,我看到 MockitoJunitRunner 或 SpringRunner 可以互换使用。我很困惑为什么 SpringRunner 也在这种情况下工作?

@RunWith(MockitoJUnitRunner.class) // also work when @RunWith(SpringRunner.class) is used
public class testService {
  @InjectMocks
  private ServiceA serviceA;

  @Mock
  private DependencyA dependencyA;
}

【问题讨论】:

    标签: java spring spring-boot mockito spring-test


    【解决方案1】:

    通常,如果您使用 Spring Boot 并且需要从 Spring ApplicationContext 模拟一个 bean,那么您将使用 Spring Boot 的 @MockBean 支持而不是简单的 @Mock。

    如果您的 bean 注入是通过 Autowired 注解发生的,那么 @mock 将不起作用。

    【讨论】:

      【解决方案2】:

      在谈论@MockBean时引用此线程

      该类包含在 spring-boot-test 库中。它允许在 Spring ApplicationContext 中添加 Mockito 模拟。

      基本上@MockBean@Mock@InjectMocks 的组合。因此,您也可以将 @Mock 与 springrunner 一起使用,但当然不推荐,因为它更重。

      通常您会使用 Mockito 进行轻量级单元测试,而当您想要一个模拟 servlet 环境(例如组件测试或混合集成测试)时使用 @MockBean

      Difference between @Mock, @MockBean and Mockito.mock()

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-20
        • 1970-01-01
        • 2020-03-13
        相关资源
        最近更新 更多