重构静态类,以便我可以对它进行单元测试

时间:2013-03-10 16:22:32

标签: java

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

目前我有这个:

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

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

2 个答案:

答案 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();
    }

}