2011-05-05 32 views
7

我正在使用依赖于MongoDB进行持久化的Jersey构建RESTful Web服务。如何使用Jersey(测试框架)将数据源依赖项注入REST风格的Web服务?

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

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

什么是从我的单元测试类注入到服务器实例(泽西测试框架在灰熊容器中设置)的依赖项的最佳方式是什么?

回答

3

在深入了解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,而不是依靠泽西测试的灰熊网站上的自定义容器来建造一个。

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