当前位置: 首页 > news >正文

单测篇 - 如何mock静态常量

本文对应源码地址:
https://github.com/nieandsun/NRSC-STUDY/tree/master/nrsc-unit-test-study

1 如何mock静态常量

先看如下代码,这里如何对方法中的静态常量DEMO_CONSTANT进行mock呢?

public class Demo1StaticConstant {/**** 这里的类型不能是基本类型或String哟 ~~ why(???)*/private static final Object DEMO_CONSTANT = "xiaomi";/**** 静态方法* @param param* @return*/public static String demoMethod(Object param) {if (Objects.equals(param, DEMO_CONSTANT)) {return "111";}return "222";}/**** 非静态方法* @param param* @return*/public String demoMethod2(Object param) {if (Objects.equals(param, DEMO_CONSTANT)) {return "111";}return "222";}
}

直接公布答案,其实我们可以借助PowerMockMemberMatcher

(org.powermock.api.support.membermodification.MemberMatcher),

当然也可以使用其实现类MemberModifierPowerMockito 则写出的单测如下:

@RunWith(PowerMockRunner.class)
@PrepareForTest({Demo1StaticConstant.class})
public class Demo1StaticConstantTest {@Testpublic void testDemoMethod() throws Exception {//属性1:要mock的静态常量所在类的类型//属性2:要mock的静态常量名称//属性3:要mock的静态常量所在类的类型(或要mock的静态常量所在的对象)//属性4:要设置的值MemberModifier.field(Demo1StaticConstant.class, "DEMO_CONSTANT").set(Demo1StaticConstant.class, "huawei");String result1 = Demo1StaticConstant.demoMethod("huawei");Assert.assertEquals(result1, "111");String result2 = Demo1StaticConstant.demoMethod("xiaomi");Assert.assertEquals(result2, "222");}@Testpublic void testDemoMethod2() throws Exception {//属性1:要mock的静态常量所在类的类型//属性2:要mock的静态常量名称//属性3:要mock的静态常量所在类的类型(或要mock的静态常量所在的对象)//属性4:要设置的值Demo1StaticConstant demo = new Demo1StaticConstant();MemberModifier.field(Demo1StaticConstant.class, "DEMO_CONSTANT").set(demo, "huawei");String result1 = demo.demoMethod2("huawei");Assert.assertEquals(result1, "111");String result2 = demo.demoMethod2("xiaomi");Assert.assertEquals(result2, "222");}
}

贴一下运行结果,可以看到行覆盖率和分支覆盖率都是100%.
在这里插入图片描述

2 引申

做一点点引申,很多公司一般都有自己的分布式配置中心(或平台)。而这些配置落到我们自己的代码中,一般就是一个个的静态常量,这时候如果要对其进行写单测时,其实完全没必要去理解其具体的实现,只要将其当做一个个的静态常量就可以了。


http://www.mrgr.cn/news/66956.html

相关文章:

  • 设计模式-构建者
  • 介绍一下strcpy函数(c基础)
  • 商城项目购物车的实现
  • 【精选报告】2024全球智能家居市场深度研究报告(附PDF下载)
  • 网络自动化03:简单解释send_config_set方法并举例
  • 父组件给公共子组件传递函数,并使用子组件的函数及对象。
  • PCL 基于法线的最小距离约束寻找对应点对
  • 2025年15家软考培训机构测评!关注这12个关键点不会错!
  • 精准优化Elasticsearch:磁盘空间管理与性能提升技巧20241106
  • 基础 IO(文件系统 inode 软硬链接)-- 详解
  • 2025前瞻 | 小红书用户消费趋向洞察
  • wordpress判断page页与非page页
  • Meme 币生态全景图分析:如何获得超额收益?
  • 6堆(超级重点)
  • 昆仑通态触摸屏-如何完成几个窗口的切换
  • Django+DRF+Celery+Redis通用Requirements记录
  • 【Linux系统编程】线程池和C++线程安全
  • 富格林:曝光交易方式阻挠受害
  • Linux操作系统开机引导
  • 静态库、动态库、framework、xcframework、use_frameworks!的作用、关联核心SDK工程和测试(主)工程、设备CPU架构
  • 【进阶】java基础之集合(2)数据结构<树>
  • C# WPF 打印机
  • 淘宝反爬虫机制的主要手段有哪些?
  • 拒绝事后背锅:测试项目中的风险管理一定要知道
  • java面试2.0
  • 配电线路的监控环境故障预警