单元测试 – 如何使用Jersey(测试框架)将数据源依赖注入到RESTful Web服务中?

我正在使用Jersey构建一个RESTful Web服务,它依赖于MongoDB的持久性.

Web服务本身连接到默认数据库,但对于单元测试,我想使用单独的测试数据库.我会在setUp中填充这个测试数据库,运行我的测试,然后在tearDown中销毁它.

通常,我会在这里使用依赖注入将数据源提供给服务将使用的实体管理器,但在这种情况下,Web服务独立于单元测试运行.我正在使用Jersey Test Framework,它启动Grizzly容器来提供Web服务接口,并为单元测试类提供Web服务客户端.

将单元测试类中的依赖项注入服务器实例(Jersey Test Framework在Grizzly容器中设置)的最佳方法是什么?

在深入研究Jersey Test Framework源代码之后,我发现了一种将依赖项注入RESTful资源类的优雅方法.

在我的测试类(扩展JerseyTest)中,我只添加了configure()方法的实现:

public AppDescriptor configure() {
    return new WebAppDescriptor.Builder()
        .contextListenerClass(ContextLoaderListener.class)
        .contextParam("contextConfigLocation","classpath:applicationContext.xml")
        .initParam("com.sun.jersey.config.property.packages","[resource package]")
        .build();
}

这有效地提供了一个自定义构建的WebAppDescriptor,而不是依靠Jersey Test的Grizzly Web容器来构建一个.

这将使用类路径上的“applicationContext.xml”文件,可以为运行JUnit测试配置不同的文件.实际上,我有两个不同的applicationContext.xml文件:一个用于我的JUnit测试,另一个用于生产代码.测试的applicationContext.xml将以不同方式配置数据访问依赖项对象.

相关文章

适配器模式将一个类的接口转换成客户期望的另一个接口,使得原本接口不兼容的类可以相互合作。
策略模式定义了一系列算法族,并封装在类中,它们之间可以互相替换,此模式让算法的变化独立于使用算法...
设计模式讲的是如何编写可扩展、可维护、可读的高质量代码,它是针对软件开发中经常遇到的一些设计问题...
模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中,使得子类可以在不改变算法结...
迭代器模式提供了一种方法,用于遍历集合对象中的元素,而又不暴露其内部的细节。
外观模式又叫门面模式,它提供了一个统一的(高层)接口,用来访问子系统中的一群接口,使得子系统更容...