现象是一个方法的结果无法正常模拟,直接进入了方法进行执行。

方法的调用是这样的

when(spy.checkMasterSlaveNumber(Mockito.anyList(), Mockito.anyMap())).thenReturn(appMasterSlaveArrayList);

解决思路:

经过各种尝试,均无法正常模拟,于是打断点逐步调试Powermockito的模拟代码,最终发现Powermockito执行测试代码时有报异常:ArrayList cannot be returned by toString()

在网上搜索到的解决方法是将方法调用的写法改一下

//用doReturn(fooBar).when(bar).getFoo()//代替when(bar.getFoo()).thenReturn(fooBar)

https://www.codegrepper.com/code-examples/java/cannot+be+returned+by+toString%28%29+toString%28%29+should+return+String

Hi,Well actually the issue in your code resides with the spy.
问题处在你代码中的spy上Here is the explanation what's happening with your code.
解释下A spy actually execute the real code by nature, so when calling "out.produce()" the expression is actually executed and return a real Product.
一个spy对象实际上会正常执行真实代码,所以你调用out.product()方法时,表达式是真时执行并且返回了一个真实的Product对象。The constructor of Product takes the constructor arg "foo" which is a mock and it executes "f.getBar()". This invocation is recorded by mockito because this "foo" instance is a mock.
Then when you want to return "mpoo", mockito raises the exception WrongTypeOfReturnValue saying that the recorded invocation "foo.getBar()" cannot return a Product.
Product类的构造方法的构造参数 foo 是一个模拟对象,他执行了 f.getBar方法。这次调用被mockito记录了因为foo对象实例是一个模拟对象。因此当你想要返回Mpoo对象时,mockito举出WrongTypeOfReturnValue异常来标明被记录的"foo.getBar()"调用不能返回一个Product对象。If you want to mack a partial mock, which you should avoid if possible. You need to use the following style for spies, this way mockito can tell the spy instance to only record the invocation.
如果你想要部分模拟,虽然你应该尽量避免。你应该使用以下语法,这种方式可以让spy实例只记录调用。doReturn(mpoo).when(out).produce();Hope that helps.--
Brice

https://groups.google.com/g/mockito/c/9WUvkhZUy90

我就将我的写法改为

//原
when(spy.checkMasterSlaveNumber(Mockito.anyList(), Mockito.anyMap())).thenReturn(appMasterSlaveArrayList);
//改后
doReturn(appMasterSlaveArrayList).when(spy).checkMasterSlaveNumber(anyList, anyMap);

然后就能成功的进行测试模拟了。

Powermockito这里有个坑,就是出现它无法模拟的异常后并不会在堆栈输出,这时可以打断点进入Powermockito的代码看看是否有报什么异常,导致无法正常模拟。

PowerMockito问题解决一则相关推荐

  1. Java单元测试实践-24.Gradle执行test任务卡死问题解决

    Java单元测试实践-00.目录(9万多字文档+700多测试示例) https://blog.csdn.net/a82514921/article/details/107969340 1. Gradl ...

  2. undefined reference to 'pthread_create'问题解决(转)

    undefined reference to 'pthread_create' undefined reference to 'pthread_join' 问题原因:     pthread 库不是 ...

  3. mysql 4.0.27 下载,CentOS编译Mysql 4.0.27数据库问题解决

    CentOS编译Mysql 4.0.27数据库问题解决以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 现在好多人都用起了 ...

  4. oracle实例没有连到监听上6,oracle LISTENER未监听到oracle实例问题解决

    oracle LISTENER未监听到oracle实例问题解决 LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = ...

  5. linux+bin+写入引导区,CentOS 6.4 U盘启动盘制作、安装及遇到的问题解决

    用UltraISO Premium Edition  9.3 制作的CentOS 6.4 U盘安装盘, 安装时提示Press the key to begin the installation pro ...

  6. Oracle不能在本地计算机启动,Windows 不能在本地计算机启动 OracleDBConsoleorcl的问题解决方法...

    解决步骤如下: 1.开始->运行cmd 2.执行 emctl start dbconsole 输入:C:\Documents and Settings\xcl>emctl start db ...

  7. 【python】 OSError:sift not found 问题解决

    [python] OSError: XXXX.sift not found 问题解决 在python环境下通过sift描述子对图像进行特征匹配时出现错误(心累):mpire.sift not foun ...

  8. VS 打开No EditorOptionDefinition export found for the given option name问题解决

    打开vs项目文件时,无法加载解决方案,报错如下: 解决方法: 1.关闭VS 2.找到ComponentModelCache所在文件夹%LocalAppData%\Microsoft\VisualStu ...

  9. C语言 #ifndef 引起的redefinition of xxx 问题解决

    问题如下 多个.c和.h文件 其中cloth.h分布被hat.h和paths.h包含,编译时出现如下问题: error: redefinition of struct _Cloth 我的cloth.h ...

  10. 029 浏览器不能访问虚拟机的问题解决

    1.在搭建分布式时 ssh一直不能进行scp,后来发现一个问题. windows中的hosts配置了三台虚拟机的映射,但是在虚拟机中的hosts没有配置. 做法是在每台虚拟机上都配置三台虚拟机的映射. ...

最新文章

  1. 第三章:创建用户界面组件--可视化组件(一)
  2. ECCV 2020 五项大奖出炉!李飞飞高徒、徒孙共摘最佳论文奖
  3. HADOOP2.5.0_64安装日志
  4. php操作memcache缓存基本方法
  5. 速修复!Netgear 61款路由器和调制解调器中存在多个严重的预认证RCE漏洞
  6. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_6-2.申请微信支付介绍和不同场景的支付方式...
  7. 计算机组成原理 王道考研2021 第一章:计算机组成原理概述 -- 计算机硬件的基本组成、认识各个硬件部分
  8. 微信公众号开发之网页授权
  9. 非技术/汇报措辞:你懂得怎样向领导汇报吗(审阅、审批、批阅、批示、查阅)
  10. unit04-JavaScript
  11. 玩乐购与京东天猫深度合作 打造云购全网最低价
  12. MyBatis入门(从零到一)
  13. 关于手机唯一识别码的研究meid和imei
  14. 互联网的SEDA高并发架构
  15. 图像与点云三维重建算法
  16. 利用百度地图采集大量某一区域经纬度信息
  17. 魔乐科技安卓开发教程----李兴华----07BroadCast广播
  18. 写给2018年底的我的一封信
  19. Unity学习笔记:监听函数有什么卵用?(似乎就是从一件事过渡到另一件事?)
  20. java 下标的使用_使用 Java Excel 操作excel-excel下标

热门文章

  1. SQL Sever — 建表语句,设置种子数量与增量以及设置主键 代码
  2. forEach,for in,for of循环的用法
  3. Matplotlib常用绘图示例
  4. json-lib javabean转换为首字母大写的json串
  5. AngularJS 实现页面滚动到底自动加载数据的功能
  6. 在VS中使用独立的项目(Project)开发DNN模块
  7. 计算机网络网络层之数据报网络
  8. WPF中DataGrid的使用实例
  9. Security+ 学习笔记13 加密基础
  10. OSPFv3中LSA详解(四)——Link LSA详解