【发布时间】:2013-08-01 15:29:28
【问题描述】:
我正在尝试编写一个涉及使用遗留代码的单元测试。问题是,据我所知,遗留代码使用属性文件中的键/值对来初始化其最终的静态私有成员之一,而我对该属性文件的位置一无所知(整个应用程序非常庞大)。
所以,在我的测试中,我想做这样的事情(使用 Mockito):
LegacyClass legacyClass = mock(LegacyClass.class);
我最终得到一个ExceptionInInitializationError,这表明它找不到某个属性键。
在 LegacyClass.java 中,有:
private static final int LEGACY_PROPERTY =
Integer.parseInt(LegacyPropertyManager.getProp("legacy.property.key"));
有没有办法编写一个使用这个遗留类的测试,即使它正在寻找的属性键不存在?可以以某种方式嘲笑它吗?
【问题讨论】:
-
为单元测试添加您自己的属性文件,例如here
-
@RobGarwood 但问题是它是使用该属性的遗留类 - 如何让 LegacyClass 在实例化时使用我自己的属性文件,而不是 LegacyPropertyManager 查找的那个?
-
@JeffBowman 确实很聪明;虽然我不太确定如何使用
mockStatic来模拟getProp以便它使用我的属性文件。在我的单元测试中,我尝试模拟LegacyPropertyManager,然后像您链接到的示例中那样设置when(...).thenReturn(...),但看起来LegacyClass 仍然使用原来的。我需要做一个额外的步骤吗? -
@dashik 提升一个答案,给它自己的线程。
标签: java unit-testing junit mockito