如何对滥用静态的遗留应用进行单元测试?

时间:2015-09-16 15:46:10

标签: java unit-testing ejb-3.0

我继承了一个使用EJB 3.0并且没有测试的遗留Java 1.5项目。

我正在尝试创建一些单元测试,但代码都与静态调用纠缠在一起。每次需要访问业务接口时,都会调用以下类:

public final class EJBHelper {

    private static InitialContext context;

    static {
        try {
            context = new InitialContext();
        } catch (NamingException e) {
           ...
        }
    }

    public static Object getBean(String entity) throws NamingException {
        return context.lookup("PROJECT_EAR/" + entity + "Bean/local");
    }
}

在每个类中,为每个需要的EJB bean重复此代码:

public class SomeService {
    private static SomeBean someBean;
    private static SomeBean getSomeBean() throws NamingException {
        if (someBean== null) {
            someBean= (SomeBean) EJBHelper.getBean("some");
        }
        return someBean;
    }

    private static AnotherBean anotherBean;
    private static AnotherBean getAnotherBean() throws NamingException {
        if (anotherBean == null) {
            anotherBean= (AnotherBean ) EJBHelper.getBean("another");
        }
        return anotherBean;
    }

    public doSomething() {
        getSomeBean().findAll(...)

        getAnotherBean().makePersistent(...)
    }    
}

我应该如何重构这个混乱?

1 个答案:

答案 0 :(得分:0)

是否需要静态类是静态的?如果没有,我会尝试将它们重构为非静态类,然后通过构造函数将依赖项注入到Service类中。