单元测试(mock) 错误org.mockito.Mockito.framework()Lorg/mockito/MockitoFramework;解析

本文介绍了在SpringBoot项目中遇到的Mockito和PowerMock的版本冲突问题,详细分析了错误原因和解决方案。通过排除冲突的mockito-core依赖并引入合适版本的mockito-core,成功解决了NoSuchMethodError,确保单元测试正常运行。
摘要由CSDN通过智能技术生成

前言

  如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。
  而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!!


单元测试(mock) 错误org.mockito.Mockito.framework()Lorg/mockito/MockitoFramework;解析

01 准备

01::01 安装maven dependency helper插件和maven helper插件

用来分析你的依赖
打开idea 选择 File -> Settings… ->Plugins
输入maven dependency helper
选择下面红框处的两个插件安装,用来分析

在这里插入图片描述

02 问题经过

依赖:


        <!-- PowerMock+Mockito+Junit4.4 -Above-->
        <dependency>
            <groupId>org.powermock</groupId>
            <artifactId>powermock-core</artifactId>
            <version>2.0.0-RC.4</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.powermock</groupId>
            <artifactId>powermock-module-junit4</artifactId>
            <version>2.0.0-beta.5</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.powermock</groupId>
            <artifactId>powermock-api-mockito2</artifactId>
            <version>2.0.0-beta.5</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
            <version>3.2.9</version>
        </dependency>
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-inline</artifactId>
            <version>2.15.0</version>
        </dependency>

使用:

    @InjectMocks
    TestController controller;
    @Mock
    private TestService service;

    @Before
    public void setUp() {
        //为UT提供框架使用的自动验证
        MockitoAnnotations.initMocks(this);
    }

    @Test
    public void test_Query_01() {
        String msg = "{\n" +
                "    \"mainCode\":\"XXX\"\n" +
                "}";
        AAA vo = JSON.parseObject(msg,new TypeReference<AAA>(){
        });
        PowerMockito.when(service.query(Mockito.any())).thenReturn(new HashMap<>());
        controller.query(vo);
    }

错误:

Exception in thread "main" java.lang.NoSuchMethodError: org.mockito.Mockito.framework()Lorg/mockito/MockitoFramework;
	at org.powermock.api.mockito.mockmaker.MockMakerLoader.doLoad(MockMakerLoader.java:45)
	at org.powermock.api.mockito.mockmaker.MockMakerLoader.load(MockMakerLoader.java:36)
	at org.powermock.api.mockito.mockmaker.PowerMockMaker.<init>(PowerMockMaker.java:36)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at java.lang.Class.newInstance(Class.java:442)

03 分析依赖

1、打开pom文件
2、选择dependency analyzer,输入mock
在这里插入图片描述
在这里插入图片描述
同时我们了解到的是对于 PowerMock 2.x,您至少需要 Mockito 2.8.9+。
因此有兼容问题。
在给你们看一下正常的依赖关系是这样的:
在这里插入图片描述
因此我们就要手动修改一下它的pom了,如下:
1、右键点击exclude
在这里插入图片描述
2、添加兼容的mockito版本
最后的效果:

       <!-- PowerMock+Mockito+Junit4.4 -Above-->
        <dependency>
            <groupId>org.powermock</groupId>
            <artifactId>powermock-core</artifactId>
            <version>2.0.0-RC.4</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.powermock</groupId>
            <artifactId>powermock-module-junit4</artifactId>
            <version>2.0.0-beta.5</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.powermock</groupId>
            <artifactId>powermock-api-mockito2</artifactId>
            <version>2.0.0-beta.5</version>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <artifactId>mockito-core</artifactId>
                    <groupId>org.mockito</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
            <version>3.2.9</version>
        </dependency>
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-inline</artifactId>
            <version>2.15.0</version>
            <exclusions>
                <exclusion>
                    <artifactId>mockito-core</artifactId>
                    <groupId>org.mockito</groupId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
            <version>2.23.4</version>
        </dependency>

03 问题分析

一句话,我这个项目的springBoot版本比较低,连带着mockito的版本也较低,产生了兼容的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

栗子~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值