【问题标题】:Spring Boot Unit testing for Mock beans vs Mockito模拟 bean 与 Mockito 的 Spring Boot 单元测试
【发布时间】:2017-07-01 01:58:55
【问题描述】:

我正在使用 spring boot 1.5.4 项目,我需要澄清测试包。

我看到 Spring Boot 带有 @MockBean,它是 org.springframework.boot.test.mock.mockito 包的一部分。

我的问题是 - 它是否类似于 Mockito 外部依赖项,我可以避免使用 Mockito 作为外部依赖项作为 spring boot mock。* 包具有 Mockito 具有的所有功能?

【问题讨论】:

    标签: java spring unit-testing spring-boot


    【解决方案1】:

    正如 Greg 的回答中已经指出的那样,mockito 核心已经包含在 spring-boot-starter-test 中,因此它已经存在于您的项目中,不需要外部依赖。

    话虽如此 - mockito 的 @Mock 和 Spring 的 @MockBean 有点不同,@MockBean 基本上是 @Mock 加上 @Bean 所以它做了 mockito 注释的作用加上它像bean 也是如此,即它将实例放置在 Spring 的应用程序上下文中,并且所有其他与 Spring bean 相关的概念也出现了。

    来自documentation -

    可用于向 Spring 添加模拟的注解 应用程序上下文。可用作类级别注释或 @Configuration 类或测试类中的字段 @RunWith SpringRunner。

    Mocks 可以按类型或 bean 名称注册。任何现有的单曲 上下文中定义的相同类型的 bean 将被替换为 mock,如果没有定义现有的 bean,则会添加一个新的。

    当@MockBean 用于字段时,以及在 应用上下文,mock也会被注入到字段中。

    对于没有 DI 和上下文的非 Spring 应用程序,您应该使用 @Mock,对于 Spring 应用程序,您应该使用 @MockBean

    【讨论】:

      【解决方案2】:

      如果您查看 dependencies 的 spring-boot-starter-test,您会发现它依赖于 Mockito 库,因此已包含在内。

      【讨论】:

        猜你喜欢
        • 2019-07-04
        • 2021-05-28
        • 1970-01-01
        • 2020-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多