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

Java 为JERSEY web服务编写测试用例的最佳方法是什么?,java,junit,jersey,jax-rs,testng,Java,Junit,Jersey,Jax Rs,Testng,我用Jersey库实现了一个JAX-RSWeb服务,现在我想测试它。为了做到这一点,我希望在测试中通过使用模拟服务对其进行预初始化来承载此服务 托管此类服务并执行测试调用的最佳方式是什么 @Path("/srv") public class MyService { @GET public void action(@Context UriInfo uri) { ... } } @Test public void myTest() { MyService service =

我用Jersey库实现了一个JAX-RSWeb服务,现在我想测试它。为了做到这一点,我希望在测试中通过使用模拟服务对其进行预初始化来承载此服务

托管此类服务并执行测试调用的最佳方式是什么

@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?
}

我还没有尝试过,但是像HtmlUnit或HttpUnit这样的JUnit扩展可能是测试JAX-RS/Jersey服务的好方法。测试用例可以使用XPath查找预期的返回值,并根据预期值验证返回值。请参阅:了解更多信息。

您可以使用Grizzly托管服务,然后使用Jersey客户端访问它们。看看示例应用程序。例如,在书店示例中,您可能会找到特别感兴趣的TestSupport类和JerseyTest类(在jersey测试框架中找到)

我希望这有帮助


(不幸的是,除非我删除了所有超链接,否则堆栈溢出不允许我发布,因为我很高兴在谷歌上搜索!)。

你有没有考虑过使用?不幸的是,与单元测试相比,它更像是集成测试,但它可能会让您走上正轨。

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


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

好的,我现在收到了。目前,该框架不支持进程中的bt,我们正在进行研究。 我们将看到,这种支持将添加到即将发布的Jersey测试框架版本中。Jersey 1.1.2-ea版本中的新(修订版)Jersey测试框架现在支持进程内或内存内测试。为了在内存中运行测试,您只需将属性test.containerFactory设置为com.sun.jersey.test.framework.spi.container.inmemory.InMemoryTestContainerFactory,即按如下方式运行测试: mvn清理测试-Dtest.containerFactory=com.sun.jersey.test.framework.spi.container.inmemory.InMemoryTestContainerFactory-DenableLogging


有关更多详细信息,请浏览标题为“Jersey Test Framework重新访问”的博客条目at.

几乎完全重复了问题911805——您是在询问Jersey特定的还是通用的JAX-RS测试技巧?我知道如何测试JAX-RS,但我正在尝试找出如何使用特定的实现(Jersey和Restlet)。如果其中一个能为我提供一个可接受的解决方案,这将是我为我们的产品选择的技术。目前我正在使用Jersey,但很明显,它并没有为我提供一种只启动一项特定服务的方法。它只是用它能找到的所有服务启动整个服务器。我需要一种方法来使用预定义的模型来组装测试中的服务。您找到一种方法来使用模型来组装其余资源吗?我也在尝试同样的事情。是的,我看到了。这是一个集成测试的问题。为了避免集成测试,我应该能够创建服务类的真实实例,使用mock对其进行初始化,然后将其传递给Jersey以在过程中托管它。此框架不允许在与测试定义相同的位置初始化服务实例。它仍然需要通过配置文件启动整个服务器。感谢您的响应。你的目标是什么时候拥有它?这是测试过程中非常重要的一部分,“过程中”允许开发人员正确初始化服务/组件,并模拟相关部分,以将它们与系统的其余部分隔离开来,并支持对期望的断言。没有办法。我现在不能给出日期,但会尽快增加支持。一旦准备好了,它会让你保持状态。InMemory是否与@Context一起工作?这对我来说不合适。导致它抛出异常。(当它返回一个无消息、无原因的ErrorMessagesException时,这些日志记录了4000行。)