网上找的大多不好用。甚至有的答案说不能。
本人不服,试了一个晚上终于调试成功了。


@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()相关推荐

  1. java 的 System.getenv() 和 System.getProperty()

    概述 java中提供了 System.getenv() 和 System.getProperty() 两个方法可以获取系统的环境变量和java程序相关的信息. Java提供了System类的静态方法g ...

  2. Java系统变量之System.getenv()和System.getProperty()

    简述 Java提供了System类的静态方法getenv()和getProperty()用于返回系统相关的变量与属性,getenv方法返回的变量大多于系统相关,getProperty方法返回的变量大多 ...

  3. 系统变量之System.getenv()和System.getProperty()

    Java提供了System类的静态方法getenv()和getProperty()用于返回系统相关的变量与属性,getenv方法返回的变量大多于系统相关,getProperty方法返回的变量大多与ja ...

  4. Java中的System.getenv()和System.getProperty()

    System.getenv()和System.getProperty()是Java种常用的两种读取环境配置信息的方法,它们都是java.lang.System类的方法,用途有相似之处,但我们在实际使用 ...

  5. Java--获取环境变量(System.getenv)--方法/实例

    原文网址:Java--获取环境变量(System.getenv)--方法/实例_IT利刃出鞘的博客-CSDN博客 简介 说明 本文用示例介绍Java获得环境变量的方法:System.getenv. S ...

  6. java getenv()_Java System getenv()方法

    Java System getenv()方法 java.lang.System.getenv(String name) 方法获取指定的环境变量的值.环境变量是依赖于系统的外部命名值. 环境变量应使用一 ...

  7. java getenv_Java利用System.getenv()和System.getProperty()来读取配置信息

    System.getenv()和System.getProperty()是Java种常用的两种读取环境配置信息的方法,它们都是java.lang.System类的方法,用途有相似之处,但我们在实际使用 ...

  8. getenv java,java System.getenv环境名称以“=”开头

    我注意到 Windows上的 Java环境(通过System.getenv()调用获得)包含一些在真实环境中不存在的变量.这些以&equals-sign开头并包含"= ExitCod ...

  9. java getenv()_Java系统变量信息获取方法System.getenv()与System.getProperty()

    Java提供了System类的以下静态方法用于返回系统相关的变量与属性: System.getenv() 方法是获取指定的环境变量的值,大多与系统相关. System.getenv(String st ...

最新文章

  1. 鸿蒙OS:万物互联,方舟Compiler
  2. Spark的基础应用
  3. AI时代人类需要具备的九种软技能,你get了几个?
  4. [20170711]关于tmux共享会话问题.txt
  5. c#之旅--第六天(类,对象,方法)
  6. Winform中设置ZedGraph的X轴与Y轴的刻度不在对面显示
  7. Kafka概念入门(一)
  8. java 异常机制_深入理解Java异常处理机制
  9. 如何配置一个最基本的web富文本编辑器?--之wangEditor(验证成功)
  10. python去掉最高分和最低分_去掉一个最高分,去掉一个最低分求平均值(trimmean)...
  11. 活动事务日志以及事务的类型
  12. WORD如何修改自动编号的起始编号值?
  13. 在著名出版社出版书,你也行——记录我写书出版的经历和体会
  14. NSX产品许可介绍( 适用于vSphere 6.2.x,6.3.x和6.4.x的VMware NSX的产品产品(2145269))
  15. 中缀表达式求值,中缀表达式转化为二叉树
  16. Python下多变量联合分布图(pairplot)绘制——seaborn
  17. puzzle(102)数独
  18. 理解闭包的前置条件—— λ演算和作用域规则
  19. 用ssh方法scp,从本地传输文件到服务器
  20. 校招Java后端开发面经专栏——序

热门文章

  1. 测试工程师面试题合集系列[4]
  2. ESP32驱动WS2812
  3. MySQL的简单学习
  4. 大数据系列博客准备开更:心有猛虎,何惧骄阳
  5. 苹果手机进和平精英显示无法连接到服务器,和平精英WIFI登录不了 数据流量可以进入原因解答...
  6. gitlab首次上传 将本地代码上传
  7. 西交计算机视觉作业,西安交通大学数字图像处理第三次作业.docx
  8. 微软mos认证计算机办公,微软办公软件国际认证 (MOS) Office 2010大师级通关秘籍
  9. zte怎么开虚拟服务器,zte路由器设置虚拟服务器
  10. hive url编码解码