泽西岛单元测试:内存容器与灰熊

Jersey Unit Test: in memory container vs grizzly

我正在努力了解泽西岛的单元测试。

不直接依赖于 Jersey 的 classes 可以使用标准 JUnit 进行单元测试。这个可以。

但也有 Jersey(或者,我应该说 JAX-RS?)依赖 classes。为了测试这些(包括注释、序列化、状态代码等的正确性)Jersey 提供了包含基础 JerseyTest class.

的 "test framework"

这个也很好理解

然而,官方文档指定了几种支持的容器类型,其中可以执行 JerseyTest 的子classes。

这些容器似乎可以分为两种类型:

  1. 真正的容器
  2. 内存容器

从我目前(新手)的角度来看,所有类型 #1 容器都提供相同的功能。因此,让我们以Grizzly作为第一类代表。

现在,很明显内存容器(根本不是真正的容器)比 Grizzly 更快。因此,我想使用这个容器来测试 Jersey 依赖 classes。但是the official documentation的这个说法让我很困惑:

This containers does not support servlet and other container dependent features, but it is a perfect choice for simple unit tests.

我试图 google 将内存容器与 Grizzly 进行比较,但没有找到任何明确的比较。我也读过 this highly technical thread,但我仍然不清楚内存容器的缺点。

在这方面,我有两个问题:

  1. "servlet and other container dependent features" 是什么(不需要全面的列表,只是一般描述)?
  2. 如果我选择内存容器,我会遇到代码通过测试但在生产中失败的情况吗(如果重要的话,我会在生产中使用Tomcat)?

谢谢

What "servlet and other container dependent features" are (no need for a comprehensive list, but just general description)?

假设您需要在资源中使用 HttpServletRequestServletContext 等。或者,如果您正在使用影响 Jersey 应用程序的 serlvet 过滤器或侦听器。这些是 servlet 功能。

其他 "container features" 仅表示您在生产中使用的容器所特有的任何其他功能。例如,对于 Grizzly,您可以注入特定于 Grizzly 的 Request 对象。

If I choose in-memory container, can I then encounter a situation of code that passes test, but fails in production (I will use Tomcat in production, if that matters)?

主要是如果你使用上面提到的物品。

看到 example of where a servlet environment is required. Here, there was a Servlet Filter being used for security. So the filter needed to be configured in the test. And