Java单体测试static final值修改

您所在的位置:网站首页 java修改静态变量 Java单体测试static final值修改

Java单体测试static final值修改

2024-07-11 07:25| 来源: 网络整理| 查看: 265

测试目标代码 public Class Temp { private static final boolean VAULE = true; public testFunc() { if (VAULE) { ...; } } }

通常测试测试VAULE值为true,但是测试值一致测试不到false分支,客户要求分支达到一定程度,现在需要将VAULE值设置为false,设置方法如下:

测试代码 @Test public void test_Temp_testFunc_VAULE_false() { Temp obj = new Temp(); Field valueField = Temp.class.getDeclaredField("VAULE"); //通过反射获取Field对象 valueField.setAccessible(true); //值为 true 则指示反射的对象在使用时应该取消 Java 语言访问检查,提升测试速度 Field modifiers = valueField .getClass().getDeclaredField("accessFlags"); // 根据源码查看android9的内容(原本变量为modifiers),获取到accessFlags,来设置其final属性是否取消 modifiers.setAccessible(true); modifiers.setInt(valueField , valueField .getModifiers() & ~Modifier.FINAL); // 取消final属性 valueField.set(null, false); modifiers.setInt(valueField , valueField .getModifiers() & ~Modifier.FINAL); //重新设置上变量的final属性,为了保证后续内容不可预期发生 obj.testFunc(); //调用测试代码 } 其它注意事项

为了保证原本代码逻辑的合理性,建议在setUp中重新复归

@Before public void setUp() { // 每次执行代码顺序为 @Before->@Test->@After Temp obj = new Temp(); Field valueField = Temp.class.getDeclaredField("VAULE"); valueField.setAccessible(true); Field modifiers = valueField .getClass().getDeclaredField("accessFlags"); modifiers.setAccessible(true); modifiers.setInt(valueField , valueField .getModifiers() & ~Modifier.FINAL); valueField.set(null, true); modifiers.setInt(valueField , valueField .getModifiers() & ~Modifier.FINAL); }

为了使测试代码具有更高的复用性可阅读性,建议将测试变量名命名函数规范,不要采用数字后缀的方式,便于后续观察代码时知道测试代码走到了那个逻辑分支。

以上描述存在问题和知识点不足的地方欢迎指正和探讨~



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3