gpt4 book ai didi

java - 模拟对属性文件的依赖

转载 作者:行者123 更新时间:2023-12-04 04:47:14 24 4
gpt4 key购买 nike

我正在尝试编写一个涉及使用遗留代码的单元测试。问题是,据我所知,遗留代码使用属性文件中的键/值对来初始化其最终静态私有(private)成员之一,而我对该属性文件可能在哪里(整个应用非常庞大)。

所以,在我的测试中,我想做这样的事情(使用 Mockito):

LegacyClass legacyClass = mock(LegacyClass.class);

我最终得到一个 ExceptionInInitializationError这表明它找不到某个属性键。

在 LegacyClass.java 中,有:
private static final int LEGACY_PROPERTY = 
Integer.parseInt(LegacyPropertyManager.getProp("legacy.property.key"));

有没有办法编写使用这个遗留类的测试,即使它正在寻找的属性键不存在?它可以以某种方式被 mock 吗?

最佳答案

如果没有像 PowerMock 这样的聪明库,你可能不会走得很远。 .请注意,您的 LegacyClass.java 在静态 final 字段中初始化此属性,这意味着初始化程序将在加载后立即运行。 PowerMock 使用更深层次的魔法(阅读:字节码操作)来让您 mock the static getProp method你上面引用的。

您需要执行以下操作才能开始使用 PowerMockito:

@RunWith(PowerMockRunner.class)
@PrepareForTest(LegacyPropertyManager.class)
public class YourClass {

@Before public void stubLegacyPropertyManager() {
Mockito.when(LegacyPropertyManager.getProp("legacy.property.key"))
.thenReturn("42");
}

@Test public void yourTest() {
// ...
}
}

请注意类级别的注释,它们分别允许 PowerMock 初始化并为静态级别模拟注册正确的类。

关于java - 模拟对属性文件的依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17998326/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com