mock System.getenv()
网上找的大多不好用。甚至有的答案说不能。
本人不服,试了一个晚上终于调试成功了。
@RunWith(PowerMockRunner.class)
@PrepareForTest({EventResolverImpl.class})
public class EventTypeResolverTest {static {PowerMockito.mockStatic(System.class);PowerMockito.when(System.getenv("CF_ORG")).thenReturn("dm-canary");PowerMockito.when(System.getenv("CF_SPACE")).thenReturn("dev");PowerMockito.when(System.getenv("CF_DOMAIN")).thenReturn("cfapps.sap.hana.ondemand.com");}
说明一点相关原理。
这个 PrepareForTest 注解可以在跑TEST CASE前预处理被测试的类,通常这个类可能是个IMPL,你可能测试的是controller中的方法,最终会调用到这个类中的业务逻辑。我们要做的是跑CASE之前把impl里面通常是final String的变量prepare出来。比如这种:
private static final String CF_DOMAIN = System.getenv("CF_DOMAIN");
经过我打断点进行尝试,我发现被测试类的final变量初始化代码,优先于 测试类中@Before注释的初始化方法。所以我们的mock规则写在@Before中是没用的。
看到这儿我就感觉这属于编译优先级的知识了。问题变成都是静态代码,如何调整优先级。所以想到测试类中使用static代码块保证mock规则优于 PrePare执行。
结论:测试类置顶static代码块优先级>被测试类注入的impl类的final变量初始化优先级> 测试类中@Before注解标注的初始化代码优先级>被测试类的测试逻辑优先级
测试方法中直接跑就行,由于我们在static代码中提前mock好了静态数据。当case运行时就不会出现环境变量拿到NULL从而导致的空指针问题。
mock System.getenv()相关推荐
- java 的 System.getenv() 和 System.getProperty()
概述 java中提供了 System.getenv() 和 System.getProperty() 两个方法可以获取系统的环境变量和java程序相关的信息. Java提供了System类的静态方法g ...
- Java系统变量之System.getenv()和System.getProperty()
简述 Java提供了System类的静态方法getenv()和getProperty()用于返回系统相关的变量与属性,getenv方法返回的变量大多于系统相关,getProperty方法返回的变量大多 ...
- 系统变量之System.getenv()和System.getProperty()
Java提供了System类的静态方法getenv()和getProperty()用于返回系统相关的变量与属性,getenv方法返回的变量大多于系统相关,getProperty方法返回的变量大多与ja ...
- Java中的System.getenv()和System.getProperty()
System.getenv()和System.getProperty()是Java种常用的两种读取环境配置信息的方法,它们都是java.lang.System类的方法,用途有相似之处,但我们在实际使用 ...
- Java--获取环境变量(System.getenv)--方法/实例
原文网址:Java--获取环境变量(System.getenv)--方法/实例_IT利刃出鞘的博客-CSDN博客 简介 说明 本文用示例介绍Java获得环境变量的方法:System.getenv. S ...
- java getenv()_Java System getenv()方法
Java System getenv()方法 java.lang.System.getenv(String name) 方法获取指定的环境变量的值.环境变量是依赖于系统的外部命名值. 环境变量应使用一 ...
- java getenv_Java利用System.getenv()和System.getProperty()来读取配置信息
System.getenv()和System.getProperty()是Java种常用的两种读取环境配置信息的方法,它们都是java.lang.System类的方法,用途有相似之处,但我们在实际使用 ...
- getenv java,java System.getenv环境名称以“=”开头
我注意到 Windows上的 Java环境(通过System.getenv()调用获得)包含一些在真实环境中不存在的变量.这些以&equals-sign开头并包含"= ExitCod ...
- java getenv()_Java系统变量信息获取方法System.getenv()与System.getProperty()
Java提供了System类的以下静态方法用于返回系统相关的变量与属性: System.getenv() 方法是获取指定的环境变量的值,大多与系统相关. System.getenv(String st ...
最新文章
- 鸿蒙OS:万物互联,方舟Compiler
- Spark的基础应用
- AI时代人类需要具备的九种软技能,你get了几个?
- [20170711]关于tmux共享会话问题.txt
- c#之旅--第六天(类,对象,方法)
- Winform中设置ZedGraph的X轴与Y轴的刻度不在对面显示
- Kafka概念入门(一)
- java 异常机制_深入理解Java异常处理机制
- 如何配置一个最基本的web富文本编辑器?--之wangEditor(验证成功)
- python去掉最高分和最低分_去掉一个最高分,去掉一个最低分求平均值(trimmean)...
- 活动事务日志以及事务的类型
- WORD如何修改自动编号的起始编号值?
- 在著名出版社出版书,你也行——记录我写书出版的经历和体会
- NSX产品许可介绍( 适用于vSphere 6.2.x,6.3.x和6.4.x的VMware NSX的产品产品(2145269))
- 中缀表达式求值,中缀表达式转化为二叉树
- Python下多变量联合分布图(pairplot)绘制——seaborn
- puzzle(102)数独
- 理解闭包的前置条件—— λ演算和作用域规则
- 用ssh方法scp,从本地传输文件到服务器
- 校招Java后端开发面经专栏——序
热门文章
- 测试工程师面试题合集系列[4]
- ESP32驱动WS2812
- MySQL的简单学习
- 大数据系列博客准备开更:心有猛虎,何惧骄阳
- 苹果手机进和平精英显示无法连接到服务器,和平精英WIFI登录不了 数据流量可以进入原因解答...
- gitlab首次上传 将本地代码上传
- 西交计算机视觉作业,西安交通大学数字图像处理第三次作业.docx
- 微软mos认证计算机办公,微软办公软件国际认证 (MOS) Office 2010大师级通关秘籍
- zte怎么开虚拟服务器,zte路由器设置虚拟服务器
- hive url编码解码