代码之家  ›  专栏  ›  技术社区  ›  Mohit Kanwar

如何在Spring Boot中使用mockito?

  •  0
  • Mohit Kanwar  · 技术社区  · 2 年前

    背景: 我们使用的是Junit 5,Spring Boot 2.6.3 Spring Boot依赖于mockito内核

    问题 我希望为静态方法创建一个模拟。Mockito提供了一个库(Mockito内联),允许模拟静态方法,但是,当Mockito核心不直接处于依赖关系时,它可以工作。Mockito内联在需要时下载兼容的Mockito内核。
    (参考: https://frontbackend.com/java/how-to-mock-static-methods-with-mockito )

    可能的解决方案

    1. 从spring boot中删除mockito core——请提供帮助,建议如何做到这一点,而不影响mockito inline添加的相同依赖关系?
    2. 我的理解有一个问题——如果是这样的话,请帮助我更好地理解它,可能有一个使用Mockito和Spring boot来模拟静态方法的例子
    1 回复  |  直到 2 年前
        1
  •  1
  •   Abhijit Sarkar    2 年前

    mockito-core 被警察拉进来了 spring-boot-starter-test .只需排除它并添加 mockito-inline 作为测试依赖项。

        2
  •  0
  •   GJohannes    2 年前

    不需要额外的依赖项。莫基托。mockStatic是mockito核心的一部分。据我记忆所及,您只需在测试资源根目录的“mockito extensions”文件夹中添加文件“org.mockito.plugins.MockMaker”。

    然而,如果你真的想从spring中排除mockito的依赖性,你可以在pom中添加一个排除项。xml依赖性。如何显式排除库的依赖项的示例如下所示。

        <dependency>
            <groupId>jcifs</groupId>
            <artifactId>jcifs</artifactId>
            <version>1.3.17</version>
            <exclusions>
                <exclusion>
                    <groupId>javax.servlet</groupId>
                    <artifactId>servlet-api</artifactId>
                </exclusion>
            </exclusions>
       </dependency>
    

    也要小心使用mockStatic。始终在最后调用close,否则staticMock将在线程中保持活动状态(跨多个单元测试)。

    为给定类或接口的所有静态方法创建线程本地模拟控制器。返回对象的MockedStatic。完成测试时必须调用close()方法,否则模拟将在当前线程上保持活动状态。 注意:我们建议不要模拟标准库中的类的静态方法,也不要模拟自定义类装入器使用的类,这些自定义类装入器用于使用模拟类执行块。mock maker可能会禁止模仿已知会导致问题的know类的静态方法。此外,如果静态方法是JVM固有的,那么即使没有明确禁止,通常也不能对其进行模拟。 有关Mockito类,请参见javadoc中的示例 参数: classToMock–应该模拟静态模拟的类或接口。 defaultAnswer–调用静态方法时的默认答案。 返回: 模拟控制器