java – 使用jersey-spring3从JerseyTest容器中检索受管Bean
这个问题是从上一个问题
Specify Custom Application Context中得出的.
我们正在使用jersey-spring将泽西1.x的一些数据服务从泽西春天迁移到泽西2.x. 我们有几个继承自JerseyTest的测试类.其中一些类使用未在web.xml文件中指定的自定义applicationContext.xml文件. 为了嘲笑目标,我们会嘲笑我们泽西资源部分的一些组件. 在泽西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"); 如何使用泽西 – 春季3? 我已经梳理了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> 解决方法
注意:我不是春季专家,我认为这是一个比推荐方法更有效的方法.希望有人会想出一个更好的解决方案.
您不能通过调用ContextLoader#getCurrentWebApplicationContext()获取一个ApplicationContext实例,因为当使用Jersey Test Framework(JerseyTest)进行单元/ e2e测试时,默认情况下,在Servlet容器之外默认使用Jersey 2.x运行时. 在这种情况下,您需要使用一些解决方法来获取ApplicationContext,方法是在测试包中实现一个ApplicationContextAware接口: public class ApplicationContextUtils implements ApplicationContextAware { private static ApplicationContext applicationContext; public static ApplicationContext getApplicationContext() { return applicationContext; } @Override public void setApplicationContext(final ApplicationContext applicationContext) throws BeansException { ApplicationContextUtils.applicationContext = applicationContext; } } 一旦你有这个类,不要忘记在你的应用程序上下文描述符中提到它: ... <bean class="org.glassfish.jersey.examples.helloworld.spring.ApplicationContextUtils" /> ... 你可以在测试中使用它: public class JerseySpringResourceTest extends JerseyTest { // ... Configure ... @Before public void mockUp() throws Exception { // ApplicationContext is ready in your @Before methods ... assertThat(ApplicationContextUtils.getApplicationContext(),notNullValue()); } @Test public void testJerseyResource() { // ... as well as in your test methods. assertThat(ApplicationContextUtils.getApplicationContext(),notNullValue()); } } 注意:如果要将应用程序部署到Servlet容器并对其执行(JerseyTest)测试,请参阅“用户指南”(特别是External container部分)中的Jersey Test Framework章节. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |