0

我有一个我想重构的静态类,以便我可以更改属性文件的名称等,并且能够更轻松地对其进行单元测试。

目前我有这个:

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;
   }
}

如何在单元测试中将属性文件的名称设置为其他名称?

4

2 回答 2

3

“控制反转。” 在这里执行此操作的最简单方法是将其作为构造函数 arg。更高端的是 IOC 框架,例如 Spring。

更糟糕的情况是,因为您正在处理enum- 可能需要分解出一个接口,然后提供一个实现枚举。或更好:

public enum Settings {
    PRODUCTION("prod.xml"), UNIT_TESTING("dev.xml");
    //...
于 2013-03-10T16:24:40.500 回答
0

您可以将枚举类中的所有内容放入一个真正的可实例化类(通过包保护或受保护),然后通过枚举(getter)使其实例可访问。像这样,您可以像魅力一样对所有内容进行单元测试,也可以将其作为单例 :)。有了这个,您不需要第二个 Enum 常量(如评论中所指出的那样)。

如果您使用受保护而不是包保护,您可以通过创建一个从实际类继承的虚拟类来对其进行单元测试,并在测试中实例化它,如下所示:

private static class Dummy extends NewClass {

    public Dummy() {
        super();
    }

}
于 2013-03-10T16:40:17.723 回答