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

时间:2009-05-26 17:24:10

标签: java junit jersey jax-rs testng

我有一个用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?
}

6 个答案:

答案 0 :(得分:9)

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

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

有关详细信息,请参阅 http://blogs.oracle.com/naresh上标题为 Jersey测试框架重新访问的博客文章。

答案 1 :(得分:4)

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

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

答案 2 :(得分:2)

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

答案 3 :(得分:1)

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

我希望这会有所帮助。

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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