泽西单位测试:在内存容器与灰熊

时间:2017-05-04 18:54:42

标签: java jersey jersey-2.0 jersey-test-framework

我正试图在泽西岛进行单元测试。

不依赖于Jersey的类可以使用标准JUnit进行单元测试。这个没关系。

但是还有Jersey(或者,我应该说是JAX-RS?)依赖类。为了测试这些(注释的正确性,序列化,状态代码等),Jersey提供了包含基类JerseyTest类的“测试框架”。

这也很好,也是可以理解的。

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

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

  1. 真实容器
  2. 内存容器
  3. 从我目前(新手)的角度来看,所有#1型容器都提供相同的功能。因此,让我们把Grizzly作为#1代表。

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

      

    此容器不支持servlet和其他容器依赖   功能,但它是简单单元测试的完美选择。

    我试图谷歌用于比较内存容器与Grizzly,但没有找到任何明确的比较。我也读过this highly technical thread,但内存容器的缺点仍然不明确。

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

    1. 什么是“servlet和其他依赖容器的功能”(不需要全面的列表,只是一般描述)?
    2. 如果我选择内存容器,我是否会遇到通过测试的代码情况,但在生产中失败(我会在生产中使用Tomcat,如果这很重要)?
    3. 由于

1 个答案:

答案 0 :(得分:2)

  

什么" servlet和其他容器相关的功能"是(不需要一个全面的清单,只是一般描述)?

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

其他"容器功能"只是表示您在生产中使用的特定于该容器的任何其他功能。例如,使用Grizzly,您可以注入一个特定于Grizzly的Request对象。

  

如果我选择内存容器,我是否会遇到通过测试的代码情况,但在生产中失败(我会在生产中使用Tomcat,如果这很重要)?

主要是如果您使用上述物品。

查看example of where a servlet environment is required。这里有一个Servlet过滤器用于安全性。因此需要在测试中配置过滤器。并another example where HttpServletRequest is needed