12

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

6 回答 6

9

The new (revised) Jersey Test Framework which is part of the Jersey 1.1.2-ea release now supports the In-Process or In-Memory testing. In order to run your tests in-memory all you have to do is set the property test.containerFactory to com.sun.jersey.test.framework.spi.container.inmemory.InMemoryTestContainerFactory, i.e., run your tests as follows:

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

For more details please go through the blog entry titled Jersey Test Framework re-visited! at http://blogs.oracle.com/naresh.

于 2009-08-27T06:39:11.317 回答
5

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

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

于 2009-06-09T07:02:51.917 回答
2

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

于 2009-05-28T17:10:49.677 回答
1

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

我希望这有帮助。

(不幸的是,堆栈溢出不会让我发布,直到我删除了所有超链接,所以很高兴谷歌搜索!)。

于 2009-05-28T19:27:27.217 回答
0

好的,我现在明白了。目前该框架不支持 IN PROCESS,bt 我们正在努力。我们将看到这种支持将添加到即将发布的 Jersey 测试框架版本中

于 2009-07-07T11:23:42.473 回答
0

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

于 2009-05-28T22:17:39.013 回答