模拟在其构造函数中加载bean的Object

时间:2014-03-16 16:04:05

标签: spring mocking easymock

我想模拟一个在其单元测试期间在其构造函数中加载bean的类的实例。问题是Spring在测试期间没有活动。

我的代码是:

public class foo{ //the tested class
ObjectA oa;

public foo(){
    oa = SpringService.EnumInstance.LoadOa(); //uses spring to load oa
    }
}

public ObjectA{ //that is an enum 
    ENUM_INSTANCE;

    void func1(){...}
    int func2(){...}
}

public SpringService{
    EnumInstance;

    ObjectA LoadObjectA(){
    ...
    }
} 

如果可以的话,我会更改

oa = SpringService.EnumInstance.LoadOa(); 

oa = new ObjectA(); 

我该如何绕过它?

1 个答案:

答案 0 :(得分:2)

您可以执行以下操作:

public class foo{
ObjectA oa;

    public foo(){
       oa = SpringService.EnumInstance.LoadOa(); //uses spring to load oa
    }

    //package private constructor only used in unit test
    foo(ObjectA oa) {
        this.oa = oa;
    }
}

有些人不会对这个解决方案感到满意,因为你只是为了测试目的而改变一个测试对象,但是当严重的重构是不可能的时候,你无能为力。