2012-11-08 168 views
2

http://jersey.java.net/nonav/apidocs/latest/jersey/jersey-test-framework/jersey-test-framework-core/com/sun/jersey/test/framework/JerseyTest.html用户二种测试容器之间可以选择:不同的泽西岛测试容器有什么区别?

  1. 低级别的容器不支持的servlet
  2. 基于Web的容器不支持servlet的

我有以下问题:

  1. 每种容器的优缺点是什么?例如,我假设低级容器速度更快,但缺少某种功能。
  2. 什么意思是低级容器不支持servlet?我认为JAX-RS是基于Servlets之上的。什么不是低级容器能够做到的?

UPDATE

经过进一步的研究,我发现,低层次的容器更快,但他们真的没有servlet的运行。当客户端发出请求时,会构建相应的资源,并将响应传回给客户端,所有内存中。这与运行嵌入式数据库与传统的基于网络的JDBC连接相似。

没有机制提供ServletContextListener,注册servlet或过滤器。我猜测请求范围也不支持。

我的问题是,你真的可以在这些限制下测试任何有意义的东西吗?

+1

泽西使用内存容器测试本身所以我们已经有了这个功能,而且我们只是暴露了这一点。任何不依赖于Servlet的应用程序都可以用它来进行测试(并非所有的东西都使用servlet)..所以..我真的不明白你为什么要问 - 如果它不适合你的需要,你不需要使用它。 –

+0

@PavelBucek,我想我要求一个没有servlet可以测试的例子。你能提供一个真实世界的例子吗? – Gili

+0

@PavelBucek,例如,“任何不依赖于Servlet的应用程序”意味着如果我正在使用内存容器测试所述方法,我将无法将HttpServletRequest作为Web服务方法的参数?我承认这一点,只是确认。 –

回答

1

“......你能真正测试下这些限制,任何有意义的东西......”

您可以测试你的业务逻辑,并做到这一点更快。

(想看看这个固定虽然:JERSEY-622在内存中的测试容器不支持杰克逊,即泽西POJO映射功能。)

+1

在没有任何Web相关上下文(@RequestScoped或HttpServletRequest)的情况下测试您的业务逻辑有什么意义?仅使用普通的JUnit测试没有Jersey的代码会不会更快/更简单? – Gili

+0

我发现我正在开发的基于Jersey的服务器项目最有用的一种测试是在JUnit测试中使用Jersey客户端来逐步完成与服务器的典型客户端交互,即“登录和检索资源X的列表“,”更改用户Y的密码“,”添加资源Z的新实例,浏览Z的列表,确保新的实例在那里“等。 对于每个测试,我启动一个嵌入式Jetty服务器Spring,一个内存数据库(Derby)和相关的Jersey资源。一旦测试运行热身,然后每个测试运行可能每个0.5s,我很好。 –

+0

要回答你的问题:是的,直接测试JAX-RS资源类而不将Jersey引入图片会更容易些,但我发现使用适当的MIME类型来表达客户端测试的适当URL,等等 –