【发布时间】:2013-08-19 09:31:34
【问题描述】:
这个问题是上一个问题Specify Custom Application Context的后续问题。
我们正在将我们的一些数据服务从使用 jersey-spring 的 Jersey 1.x 迁移到使用 jersey-spring3 的 Jersey 2.x。
我们有几个继承自 JerseyTest 的测试类。其中一些类使用 web.xml 文件中未指定的自定义 applicationContext.xml 文件。
出于对象模拟的目的,我们将模拟我们 Jersey 资源中的一些组件。
在 Jersey 1.x 中,我们可以通过以下方式模拟应用程序上下文文件中的对象
<bean id="mockBean" class="org.easymock.EasyMock"
factory-method="createStrictMock" autowire="byName">
<constructor-arg index="0" value="com.xxx.xxx.ClassToMock" />
</bean>
并按如下方式检索这些模拟实例
ClassToMock obj = (ClassToMock)ContextLoader
.getCurrentWebApplicationContext()
.getAutowireCapableBeanFactory()
.getBean("mockBean");
Jersey 2.x 如何使用 jersey-spring3 实现同样的效果?
我已经梳理了API docs、user guides 和一些sources,但无法找到答案。
谢谢。
编辑:
我们将在 JAX-RS 资源中使用模拟 bean。我们的资源中有@Autowired 的服务接口。
例如
@Path(ProductResource.RESOURCE_PATH)
@Component
@Scope("prototype")
public class ProductResource
extends GenericResource<Product, BaseModel> {
/*
* Members
*/
public static final String RESOURCE_PATH = "product/";
@Autowired
protected ProductService productService;
...
我们想模拟这些服务并设定对这些服务的期望。
例如
<bean id="productService" class="org.easymock.EasyMock"
factory-method="createStrictMock">
<constructor-arg index="0"
value="com.xxx.xxx.service.ProductService" />
</bean>
【问题讨论】:
-
你能举例说明吗? (你如何/何时/在哪里使用模拟 bean?它是否在 JAX-RS 资源中?)你需要
WebApplicationContext或任何ApplicationContext就足够了吗? -
WebApplicationContext或ApplicationContext都可以。这会给我们一个指向注入 JAX-RS 资源的 bean 的指针。
标签: java spring unit-testing jersey-2.0