Hol*_*osa 9 junit spring unit-testing jersey
我正在使用JerseyTest为RESTful Web服务编写一些基于JUnit的集成测试.JAX-RS资源类使用Spring,我现在将所有内容与测试用例连接在一起,如下面的代码示例所示:
public class HelloResourceTest extends JerseyTest
{
@Override
protected AppDescriptor configure()
{
return new WebAppDescriptor.Builder("com.helloworld")
.contextParam( "contextConfigLocation", "classpath:helloContext.xml")
.servletClass(SpringServlet.class)
.contextListenerClass(ContextLoaderListener.class)
.requestListenerClass(RequestContextListener.class)
.build();
}
@Test
public void test()
{
// test goes here
}
}
Run Code Online (Sandbox Code Playgroud)
这适用于连接servlet,但是,我希望能够在我的测试用例中共享相同的上下文,以便我的测试可以访问模拟对象,DAO等,这似乎需要SpringJUnit4ClassRunner.不幸的是,SpringJUnit4ClassRunner创建了一个单独的并行应用程序上下文.
那么,任何人都知道如何创建SpringServlet和我的测试用例之间共享的应用程序上下文?
谢谢!
Ben*_*age 10
像这样覆盖JerseyTest.configure:
@Override
protected Application configure() {
ResourceConfig rc = new JerseyConfig();
rc.register(SpringLifecycleListener.class);
rc.register(RequestContextFilter.class);
rc.property("contextConfigLocation", "classpath:helloContext.xml");
return rc;
}
Run Code Online (Sandbox Code Playgroud)
对我来说,不需要SpringServlet,但如果你需要,你也可以为此调用rc.register.
我找到了几种方法来解决这个问题.
首先,在极客@ riffpie博客上有一个关于这个问题的优秀描述以及JerseyTest解决它的优雅扩展:
单元测试RESTful Jersey服务与Spring粘在一起
不幸的是,我正在使用更新版本的Spring和/或Jersey(忘记哪个)并且无法使其正常工作.
在我的情况下,我最终通过放弃Jersey测试框架并使用嵌入式Jetty和Jersey客户端来避免这个问题.这实际上在我的情况下更有意义,因为我已经在我的应用程序中使用嵌入式Jetty. yves amsellem有一个很好的使用Jersey Client和嵌入式Jetty进行单元测试的例子.对于Spring集成,我使用了Trimbo的 Jersey Tests与Embedded Jetty和Spring的变体
| 归档时间: |
|
| 查看次数: |
17538 次 |
| 最近记录: |