相关文章推荐
风度翩翩的伤疤  ·  oracle存储过程if多个条件 - CSDN文库·  11 月前    · 
爱笑的高山  ·  AI 网络安全与机器学习·  1 年前    · 
力能扛鼎的键盘  ·  string和List<string>有什么 ...·  1 年前    · 
儒雅的皮带  ·  使用spark与MySQL进行数据交互的方法 ...·  2 年前    · 
光明磊落的烤面包  ·  Nuxt.js实践篇 - 狗尾草的博客 - 博客园·  2 年前    · 
Code  ›  单元测试(mock) 错误org.mockito.Mockito.framework()Lorg/mockito/MockitoFramework;解析_栗子~~的博客
mockito mock powermock junit单元测试
https://blog.csdn.net/weixin_38316697/article/details/124847794
要出家的移动电源
2 年前
  • 前言
    • 单元测试(mock) 错误org.mockito.Mockito.framework()Lorg/mockito/MockitoFramework;解析
      • 01 准备
        • 01::01 安装maven dependency helper插件和maven helper插件
      • 02 问题经过
      • 03 分析依赖
      • 03 问题分析

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

      单元测试(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-junit 4 < /artifactId > < version > 2.0 .0-beta. 5 < /version > < scope > test < /scope > < /dependency > < dependency > < groupId > org.powermock < /groupId > < artifactId > powermock-api-mockito 2 < /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的版本也较低,产生了兼容的问题。

      先来看看下面这个示例:从上图可以看出如果我们要对A进行测试,那么就要先把整个依赖树构建出来,也就是BCDE的实例。 一种替代方案就是使用mocks从图中可以清晰的看出mock对象就是在调试期间用来作为真实对象的替代品。mock测试就是在测试过程中,对那些不容易构建的对象用一个虚拟对象来代替测试的方法就叫mock测试。知道什么是mock测试后,那么我们就来认识一下mock框架---Mockito除了有一个好记的名字外,Mockito尝试用不一样的方法做mocking测试,是简单轻量级能够替代EasyMock的框架。使用简单,测试代码可读性高,丰富的文档包含在javadoc中,直接在IDE中可查看 赠送jar包:mockito-core-3.8.0.jar; 赠送原API文档:mockito-core-3.8.0-javadoc.jar; 赠送源代码:mockito-core-3.8.0-sources.jar; 赠送Maven依赖信息文件:mockito-core-3.8.0.pom; 包含翻译后的API文档:mockito-core-3.8.0-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.mockito:mockito-core:3.8.0; 标签:mockito、core、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。 <dependency> <groupId>org.powermock</groupId> <artifactId>powermock-module-testng</artifactId> <version>2.0.2</version> <scope NoSuchMethodError是一个运行时错误,在编译时一般不会出现这个错误。 既然能成功编译,就说明方法本身是存在的,方法所在的类也是存在的,而且都可以正常的引用到。 那么为什么还会出现这个错误? 方法本身是存在的,方法所在类也是存在的,那么在运行时还会出现这个错误,就只能说明运行时引用的类里面没有这个方法。 这说起来有点拗口,简单的说,就是存在至少两... 异常情况: org.mocktio.internal.createion.instance.InstiatorProvider.getInstantiator(Long/mockito/mock/MockCreationSettings;)Lorg/mockito.internal/creation/instance/Instantiator 这种情况是mocktio jar 和... 在项目依赖比较复杂或者 Java 运行的环境有问题时,或者同一类型的 jar 包有不同版本存在,都可能触发该错误。本质上说是 JVM 找不到某个类的特定方法,也就是说 JVM 加载了错误版本的类。说白了,就是 JVM 找不到真正想要调用的方法啦!出现该错误的情形主要有以下两个种: 导入了不匹配的包版本;开发环境和运行环境不一致。 2 解决方法 查看“External Libraries”,看报错的方法到底存不存在,如果不存在,说明这个包一定有问题啦,更新包就可以啦;如果存在,说明包已... 在使用SpringBoot 2.2.1版本做项目时,使用单元测试的时候,环境中报的错误。 但是其中有一个关键的点,就是对于plugin: interface org.mockito.plugins.MockMaker这个,这个我并没有引入,为啥还报错呢?打开External Libraries库查看,发现有相关包org.mockito:mockito-core,看来应该是Spring Boot自动引入的mockito核心依赖项,如下 既然问题出在这里,我们取maven库中搜索mockito-core-3. org.mockito.exceptions.misusing.InvalidUseOfMatchersException: Misplaced or misused argument matcher detected here: -> at xxxxxxxxxxxxxxxxxxxxxxxx You cannot use argument matchers outside of verification or stubbing. Examples of correct usage of arg. 当pom文件报missing某个包时,可以从本地的maven库中删除相关的jar包,然后右单击项目,Maven4MyEclipse->Update Project,在弹出的对话框中选择“Force Update Of Snapshots/Releases",就会可以重新下载解决! 转载于:https://www.cnblogs.com/tiramisuyj/p/9375077.html...
 
推荐文章
风度翩翩的伤疤  ·  oracle存储过程if多个条件 - CSDN文库
11 月前
爱笑的高山  ·  AI 网络安全与机器学习
1 年前
力能扛鼎的键盘  ·  string和List<string>有什么区别_百度知道
1 年前
儒雅的皮带  ·  使用spark与MySQL进行数据交互的方法-腾讯云开发者社区-腾讯云
2 年前
光明磊落的烤面包  ·  Nuxt.js实践篇 - 狗尾草的博客 - 博客园
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号