如何使用JUnit测试旧的Spring 2.0.7应用程序?

时间:2018-01-19 08:39:25

标签: java spring junit4 spring2.x

我有一个使用古老版本的Spring构建的旧应用程序:2.0.7。我的任务是为这个应用程序添加新功能,所以我也需要编写一些JUnit测试。

到目前为止,我已经为我的服务编写了模型类,并在applicationContext-test.xml下放置了一个src/test/resources/文件。通常,下一步是编写我的测试用例:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"/applicationContext-test.xml"})
public class MyTestCase {
    ...
}

但正如我在Spring 2.5中所读到的那样,the Spring TestContext Framework was first introduced,因此我无法使用它。

有没有其他方法可以在JUnit中加载applicationContext.xml文件,并访问该XML文件中定义的bean?

由于我已经有了模型并且他们不需要初始化参数,我可以实例化它们并将它们传递给setter,也许使用@BeforeClass注释。但是如果可能的话,我更愿意使用Spring上下文,因为我最终得到somehow unusual way to load the beans并且它也应该进行测试......

1 个答案:

答案 0 :(得分:0)

我结束编写了一个ApplicationContext包装器,并使用init注释自己调用@Before方法,而不是依靠Spring来做到这一点。这样,我可以测试我的初始化方法,就好像是从Spring 调用它一样。

public class ApplicationContextMock implements ApplicationContext {
    private Map<String, Object> beans;

    public ApplicationContextMock() {
        beans = new HashMap<String, Object>();
        beans.put("child1", new SomeServiceMock());
        beans.put("child2", new AnotherServiceMock());
    }

    public Object getBean(String arg0) throws BeansException {
        return beans.get(arg0);
    }
    // ...
}
@RunWith(JUnit4.class)
public class MyTestCase {
    MyClass foo;

    @Before
    public void init() {
        foo = new MyClass();
        foo.loadChildren(new ApplicationContextMock());
    }

    // ...
}

(我仍然想知道在没有Spring 2.5+注释的情况下是否有更好的方法)。