我有一个静态类,我想重构,所以我可以更改属性文件的名称等,并且能够更容易地进行单元测试。
目前我有这个:
public enum MySettings {
INSTANCE;
//priv vars
private string applicationUrl;
private MySettings() {
MappingJsonFactory jf = new MappingJsonFactory();
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream mySettingsInputStream = classLoader.getResourceAsStream("a.properties");
Properties mySettingsProperties = new Properties().load(mySettingsInputStream);
// code below to load json and set priv vars etc.
}
public String getApplicationUrl() {
return applicationUrl;
}
}
如何在单元测试中将属性文件的名称设置为其他名称?
答案 0 :(得分:3)
“控制倒置。”这里最简单的方法是将其作为构造函数arg。在较高端将是IOC框架,例如Spring。
更糟糕的情况是,因为你正在处理一个enum
- 可能需要分解一个接口,然后提供一个实现枚举。或者更好:
public enum Settings {
PRODUCTION("prod.xml"), UNIT_TESTING("dev.xml");
//...
答案 1 :(得分:0)
你可以将枚举类中的所有内容转换为真正的可实例化类(通过包保护或保护),然后通过枚举(getter)创建它的实例。像这样你可以单独测试所有东西,如魅力,并将它作为单身:)。有了这个,你不需要第二个枚举常量(如评论中所指出的那样)。
如果您使用的是protected而不是包保护,您可以通过创建一个继承自实际类的虚拟类来对其进行单元测试,并在测试中将其实例化,如下所示:
private static class Dummy extends NewClass {
public Dummy() {
super();
}
}