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

1. Stub、Replace、Suppress Spring的方法

对Spring的@Component组件的方法进行Stub、Replace、Suppress时,与对Mock/Spy对象进行Stub相比,区别在于前者的作用范围是指定类的全部实例;后者的作用范围是指定的Mock/Spy对象。

1.1. 对Spring的@Component组件方法进行Stub

使用PowerMockito.stub()方法支持对Spring的@Component组件方法进行Stub。可参考前文对静态方法的处理。

使用PowerMockito.stub()对方法进行Stub时,作用范围是指定类的全部实例。

当间接调用被Stub方法时,Stub也生效。可参考示例TestSpStubPuNV3类test1方法。

  • 使用@PrepareForTest注解

使用PowerMockito.stub()方法对Spring的@Component组件方法进行Stub,需要使用@PrepareForTest注解指定Spring的@Component组件的实现类。

当不使用@PrepareForTest注解指定Spring的@Component组件实现类时,Stub不生效。可参考示例TestSpStubPuNV1类。

当使用@PrepareForTest注解指定Spring的@Component组件接口时,Stub不生效。可参考示例TestSpStubPuNV2类。

  • toReturn()与toThrow()方法

使用PowerMockito.stub()方法对Spring的@Component组件方法进行处理时,支持使用toReturn()与toThrow()方法。可参考示例TestSpStubPuNV3类test1、test2方法。

  • 使用Stubber.stubMethod()方法进行Stub

使用Stubber.stubMethod()方法支持对Spring的@Component组件方法进行Stub,使其返回指定值。支持传入Method对象,或Spring的@Component组件实现类Class对象与方法名。可参考示例TestSpStubPuNV3类test4、test5方法。

  • PowerMockito.stub()方法与Spring的@Component组件方法

PowerMockito.stub()方法支持对Spring的@Component组件的公有非void方法、公有void方法、私有非void方法、私有void方法进行Stub( void方法支持使用toThrow()处理 )。

公有非void方法的示例已在前文说明。公有void方法、私有非void方法、私有void方法可参考示例TestSpStubPuV1、TestSpStubPrNV1、TestSpStubPrV1。

1.2. 对Spring的@Component组件方法进行Replace

使用PowerMockito.replace()方法支持对Spring的@Component组件方法进行Replace。可参考前文对静态方法的处理。

使用PowerMockito.replace()对方法进行Replace时,作用范围是指定类的全部实例。

当间接调用被Replace方法时,Replace也生效。可参考示例TestSpReplacePuNV1类。

  • 使用@PrepareForTest注解

使用PowerMockito.stub()方法对Spring的@Component组件方法进行Replace,需要使用@PrepareForTest注解指定Spring的@Component组件的实现类。

  • 使用MethodProxy.proxy()方法进行Replace

使用MethodProxy.proxy()方法支持对Spring的@Component组件方法进行Replace。支持传入Method对象,或Spring的@Component组件实现类Class对象与方法名。可参考示例TestSpReplacePuNV2类。

  • PowerMockito.replace()方法与Spring的@Component组件方法

PowerMockito.replace().with()方法只支持静态方法,不支持Spring的@Component组件的非静态方法。 可参考示例TestSpReplacePuNV3类。

PowerMockito.replace()方法支持对Spring的@Component组件的公有非void方法、公有void方法、私有非void方法、私有void方法进行Replace。

公有非void方法的示例已在前文说明。公有void方法、私有非void方法、私有void方法可参考示例TestSpReplacePuV1、TestSpReplacePrNV1、TestSpReplacePrV1。

1.3. 对Spring的@Component组件进行Suppress

使用PowerMockito.suppress()方法支持对Spring的@Component组件的字段或方法进行Suppress。

1.3.1. 对字段进行Suppress

使用PowerMockito.suppress()对字段进行Suppress时,作用范围是指定类的全部实例。

当间接调用使用了被Suppress字段的方法时,Suppress也生效。可参考示例TestSpSuppressField1类test2方法。

  • 使用@PrepareForTest注解

使用PowerMockito.suppress()方法对字段进行Suppress,需要使用@PrepareForTest注解指定Spring的@Component组件的实现类。

  • 被Suppress字段的值

PowerMockito.suppress()方法支持对公有、受保护、私有的字段进行Suppress。

当字段被Suppress后,在对应的类的方法中获取字段值,为null、0、false等值。可参考示例TestSpSuppressField1类test1方法。

  • 获取字段实际值

通过反射获取被Suppress的字段,字段值仍为原始值,未被改变。可参考示例TestSpSuppressField1类test1方法。

  • 使用SuppressCode.suppressField()

使用SuppressCode.suppressField()可以对字段进行Suppress,可以传入Field对象。可参考示例TestSpSuppressField2类。

SuppressCode类的suppressField()方法除了支持传入Field类型的参数外,还支持传入“Class<?>[] classes”或“Class<?> clazz, String… fieldNames”参数,PowerMockito存在功能类似的方法,在此不进行说明。

1.3.2. 对方法进行Suppress

使用PowerMockito.suppress()对方法进行Suppress时,作用范围是指定类的全部实例。

当间接调用被Suppress方法时,Suppress也生效。可参考示例TestSpSuppressPuNVMethod2类。

  • 使用@PrepareForTest注解

使用PowerMockito.suppress()对方法进行Suppress,需要使用@PrepareForTest注解指定Spring的@Component组件的实现类。

  • 被Suppress方法的返回值

当方法被Suppress后,返回值为null、0、false等值,可参考前文对静态方法的处理。可参考示例TestSpSuppressPuNVMethod2类。

  • 使用SuppressCode.suppressMethod()

使用SuppressCode.suppressMethod()可以对方法进行Suppress,可以传入Method对象。可参考示例TestSpSuppressPuNVMethod3类。

SuppressCode类还提供了其他方法,支持对方法进行Suppress,如suppressConstructor()、suppressSpecificConstructor(),以及参数不同的suppressMethod()方法,PowerMockito存在功能类似的方法,在此不进行说明。

  • 对全部方法( 不含构造函数 )进行Suppress

使用PowerMockito.methodsDeclaredIn()方法可以获取指定类的全部方法( 不含构造函数 ),再使用PowerMockito类的suppress(Method[] methods)方法,可以对获取的全部方法进行Suppress。可参考示例TestSpSuppressMethods1类。

  • 对全部方法( 包含构造函数 )进行Suppress

使用PowerMockito.everythingDeclaredIn()方法可以获取指定类的全部方法( 包含构造函数 ),再使用PowerMockito类的suppress(Method[] methods)方法,可以对获取的全部方法进行Suppress。可参考示例TestSpSuppressEverything1类。

  • PowerMockito.suppress()方法与Spring的@Component组件方法

PowerMockito.suppress()方法支持对Spring的@Component组件的公有非void方法、公有void方法、私有非void方法、私有void方法进行Suppress。

公有非void方法的示例已在前文说明。公有void方法、私有非void方法、私有void方法可参考示例TestSpSuppressPuVMethod1、TestSpSuppressPrNVMethod1、TestSpSuppressPrVMethod1类。

1.4. 对同一个方法执行Mock/Spy后Stub、Stub、Replace、Suppress的生效情况

对同一个方法执行Mock/Spy后Stub、Stub、Replace、Suppress等操作时,生效的情况比较复杂,应避免对同一个方法执行不同的操作。

  • PowerMockito.stub().toReturn()执行多次的生效情况

当PowerMockito.stub().toReturn()对同一个方法执行多次时,最后一次执行的操作生效。可参考TestSpEffectiveStubToReturn1类。

  • PowerMockito.stub().toThrow()执行多次的生效情况

当PowerMockito.stub().toThrow()对同一个方法执行多次时,最后一次执行的操作生效。可参考TestSpEffectiveStubToThrow1类。

  • PowerMockito.stub()的toReturn()与toThrow()的生效情况

当PowerMockito.stub().toReturn()与PowerMockito.stub().toThrow()对同一个方法执行时,PowerMockito.stub().toReturn()的操作生效。可参考示例TestStEffectiveStubThrRe1类。

  • PowerMockito.replace().with()执行多次的生效情况

当PowerMockito.replace().with()对同一个方法执行多次时,最后一次执行的操作生效。可参考TestSpEffectiveReplace1类。

  • PowerMockito.stub()与PowerMockito.replace()的生效情况

当PowerMockito.stub().toReturn()、PowerMockito.stub().toThrow()与PowerMockito.replace().with()对同一个方法执行时,PowerMockito.stub().toReturn()的操作生效。可参考示例TestSpEffectiveStRe1类。

  • PowerMockito.stub().toThrow()与PowerMockito.replace()的生效情况

当PowerMockito.stub().toThrow()与PowerMockito.replace().with()对同一个方法执行时,后执行的操作生效。可参考示例TestSpEffectiveStThrRe1类。

  • PowerMockito类的stub()、replace()与suppress()的生效情况

当PowerMockito.stub().toReturn()、PowerMockito.stub().toThrow()、PowerMockito.replace().with()与PowerMockito.suppress()对同一个方法执行时,PowerMockito.suppress()的操作生效。可参考示例TestSpEffectiveStReSu1类。

  • PowerMockito类的stub()、replace()、suppress()对Mock/Spy对象的影响

PowerMockito类的stub()、replace()、suppress()方法,都无法对Spring的@Component组件实现类的Mock对象或Spy对象产生影响。只有Mockito.when()/Mockito.do…().when()方法对Spring的@Component组件实现类的Mock对象或Spy对象的Stub生效。

  • PowerMockito.stub().toReturn()对Mock/Spy对象的影响

可参考示例TestSpEffectiveMockStRet1、TestSpEffectiveMockStRet2Spy类。

  • PowerMockito.stub().toThrow()对Mock/Spy对象的影响

可参考示例TestSpEffectiveMockStThr1、TestSpEffectiveMockStThr2Spy类。

  • PowerMockito.replace()对Mock/Spy对象的影响

可参考示例TestSpEffectiveMockRe1、TestSpEffectiveMockRe2Spy类。

  • PowerMockito类的stub()、replace()对Mock/Spy对象的影响

可参考示例TestSpEffectiveMockStRe1、TestSpEffectiveMockStRe2Spy类。

  • PowerMockito.suppress()对Mock/Spy对象的影响

可参考示例TestSpEffectiveMockSu1、TestSpEffectiveMockSu2Spy类。

  • PowerMockito类的stub()、replace()与suppress()对Mock/Spy对象的影响

可参考示例TestSpEffectiveMockStReSu1、TestSpEffectiveMockStReSu2Spy类。

Java单元测试实践-15.Stub、Replace、Suppress Spring的方法相关推荐

  1. Java单元测试实践-08.Stub、Replace、Suppress静态方法

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

  2. Java单元测试实践-11.Mock后Stub Spring的@Component组件

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

  3. Java单元测试实践-09.Mockito的Stub参数条件

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

  4. Java单元测试实践-06.Mock后Stub静态方法

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

  5. Java单元测试实践-01.单元测试概述与示例

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

  6. Java单元测试实践-25.在本地使用H2数据库进行单元测试

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

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

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

  8. Java单元测试实践-23.Gradle单元测试日志、报告与JaCoCo代码覆盖率

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

  9. Java单元测试实践-21.使用Gradle执行单元测试

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

最新文章

  1. Android stadio 电脑连上手机可以识别,但是连不上Android stadio
  2. 【网址收藏】WIN10下docker docker-compose docker-machine的安装与使用
  3. JDBC对MySQL数据库存储过程的调用
  4. 全面介绍Windows内存管理机制及C++内存分配实例(三):虚拟内存
  5. bzoj 3374: [Usaco2004 Mar]Special Serial Numbers 特殊编号
  6. 快排序和堆排序,最小堆、最大堆
  7. java编写flash相册的制作软件_flash相册制作大师免费版
  8. NRF52840 BLE OTA
  9. HDU-4699 对顶栈
  10. 任意进制转换(2进制、8进制、16进制等)
  11. 【MongoDB-MongoVUE图像管理工具】
  12. 【尚硅谷】Vue.js从入门到精通笔记
  13. 一阶线性微分方程计算公式推导
  14. matplotlib交互式数据光标实现——mplcursors
  15. OpenGL模拟太阳系运行
  16. 永洪BI携手华为云FusionInsight,让数据分析提效20倍
  17. 「作于2018初」我的撸码人生
  18. JSP和ASP.NET到底谁才是未来的主宰
  19. 假设计算机工作频率为5Mhz,医用超声探头-医学影像设备-电子发烧友网站
  20. CPU和GPU频率波动幅度

热门文章

  1. redis-manger管理平台
  2. ListView的增删改查(实战)
  3. 5年Java面试阿里P6经验总结
  4. opencv两张图片叠加显示
  5. Incorrect string value: '\xF0\x9F\x98\x82' for column '' at row 1
  6. 解决ping值波动,一下20ms,一下上千ms的问题。
  7. 智能测试实践之路-UI 缺陷检测
  8. Sum of the Line UPC5222 (容斥)
  9. 英语常见缩写,职业,公司
  10. Oracle默认数据库角色账号密码