我正在试图弄清楚如何从JerseyTest的子类访问Spring bean。 扩展JerseyTest我已经设法在我的测试中加载Spring上下文,但我还没弄清楚如何访问spring上下文。我的设置如下:
public abstract class SpringJerseyTest extends JerseyTest {
public SpringJerseyTest() throws Exception {
super(new WebAppDescriptor.Builder("com.acme.resources")
.contextPath("/")
.contextParam("contextConfigLocation", "classpath:applicationContext.xml")
.servletClass(SpringServlet.class)
.contextListenerClass(ContextLoaderListener.class)
.build());
}
}
设置使用默认的Grizzly Web容器。我之前从未使用Grizzly,但在Jetty中我会做这样的事情:
public Object getSpringBean(String beanName) {
WebAppContext context = (WebAppContext) server.getHandler();
ServletContext sc = context.getServletContext();
WebApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(sc);
return applicationContext.getBean(beanName);
}
有人能指出我正确的方向吗?
答案 0 :(得分:10)
我正在使用一种天真的方法,但工作
public ResourceIT()
{
super(new WebAppDescriptor.Builder("amazingpackage")
.servletClass(SpringServlet.class)
.contextParam("contextConfigLocation", "classpath:/spring/context.xml")
.contextListenerClass(ContextLoaderListener.class)
.contextPath("context")
.build());
injectedBean = ContextLoaderListener
.getCurrentWebApplicationContext().getBean(InjectedBean.class);
}
答案 1 :(得分:2)
使用了here描述的解决方案一周,它运行正常。
答案 2 :(得分:-1)
我不理解使用Spring bean的JerseyTest的需要,通常你的Spring Beans是Service / Dao层,他们必须在他们的层上进行单元测试/集成测试,使用Mockito或DBUnit(集成测试)。
我一直在使用Sprig bean作为模拟单元测试Jersey资源类,这是因为你必须隔离测试,并且只测试JerseyTest中的Jersey东西(和Json),而不是Service或Dao Layer。是的,我确实通过了我的春豆背景,但春豆只是嘲笑,因为我不想测试JerseyTests中的春豆。
如果您将测试隔离开来,那么编写和维护测试会更容易