为JERSEY Web服务编写测试用例的最佳方法是什么?

我有一个用Jersey库实现的JAX-RS Web服务,现在我想测试它。 为了做到这一点,我想通过使用模拟服务预先初始化我的测试来托管这项服务。

托管此类服务和执行测试调用的最佳方法是什么?

@Path("/srv") public class MyService { @GET public void action(@Context UriInfo uri) { ... } } @Test public void myTest() { MyService service = new MyService(); service.setSomething(...); // How do I host it? // How do I call it? } 

新的(修订的)Jersey测试框架是Jersey 1.1.2-ea版本的一部分,现在支持进程内或内存测试。 为了在内存中运行测试,您只需将属性test.containerFactory设置为com.sun.jersey.test.framework.spi.container.inmemory.InMemoryTestContainerFactory ,即运行您的测试,如下所示:

mvn clean test -Dtest.containerFactory = com.sun.jersey.test.framework.spi.container.inmemory.InMemoryTestContainerFactory -DenableLogging

有关详细信息,请浏览名为Jersey Test Framework的博客文章重新访问! 在http://blogs.oracle.com/naresh 。

我相信Jersey测试框架为您的需求提供了解决方案。 它允许您部署单个服务,并运行其所有测试。 您可以使用该框架针对Grizzly Web容器,嵌入式GlassFish和/或HTTPServer运行测试。

请注意,您可以使用该框架对GlassFish和Tomcat等常规Web容器运行测试。 如果您有任何疑问,请随时发送电子邮件给我或泽西岛用户邮件列表 – users@jersey.dev.java.net

我没有尝试过,但像HtmlUnit或HttpUnit这样的JUnit扩展可能是测试JAX-RS / Jersey服务的好方法。 测试用例可以使用XPath来查找预期的返回值,并根据预期值validation返回的值。 有关详细信息,请参阅: http : //htmlunit.sourceforge.net/gettingStarted.html 。

您可以使用Grizzly托管服务,然后使用Jersey客户端访问它们。 看一下示例应用程序。 例如,在Bookstore示例中,您可能会发现特别感兴趣的TestSupport类和JerseyTest类(在jersey-test-framework中找到)。

我希望这有帮助。

(不幸的是Stack Overflow不会让我发布,直到我删除了所有的超链接,所以谷歌搜索开心!)。

好的,我现在明白了。 现在框架不支持IN PROCESS,我们正在研究它。 我们将看到这一支持将在即将推出的Jersey测试框架版本中添加

您是否考虑过使用Jersey测试框架 ? 不幸的是,它仍然比unit testing更多的集成测试,但它可能会让你在路上。