我正试图在泽西岛进行单元测试。
不依赖于Jersey的类可以使用标准JUnit进行单元测试。这个没关系。
但是还有Jersey(或者,我应该说是JAX-RS?)依赖类。为了测试这些(注释的正确性,序列化,状态代码等),Jersey提供了包含基类JerseyTest
类的“测试框架”。
这也很好,也是可以理解的。
然而,官方文档指定了几种类型的受支持容器,其中可以执行JerseyTest
的子类。
似乎这些容器可以分为两种类型:
从我目前(新手)的角度来看,所有#1型容器都提供相同的功能。因此,让我们把Grizzly作为#1代表。
现在,很明显内存容器(根本不是真正的容器)比Grizzly快。因此,我想使用这个容器来测试Jersey依赖类。但the official documentation的陈述使我感到困惑:
此容器不支持servlet和其他容器依赖 功能,但它是简单单元测试的完美选择。
我试图谷歌用于比较内存容器与Grizzly,但没有找到任何明确的比较。我也读过this highly technical thread,但内存容器的缺点仍然不明确。
在这方面,我有两个问题:
由于
答案 0 :(得分:2)
什么" servlet和其他容器相关的功能"是(不需要一个全面的清单,只是一般描述)?
假设您需要在资源中使用HttpServletRequest
,ServletContext
等。或者,如果您正在使用影响Jersey应用程序的serlvet过滤器或侦听器。这些是servlet功能。
其他"容器功能"只是表示您在生产中使用的特定于该容器的任何其他功能。例如,使用Grizzly,您可以注入一个特定于Grizzly的Request
对象。
如果我选择内存容器,我是否会遇到通过测试的代码情况,但在生产中失败(我会在生产中使用Tomcat,如果这很重要)?
主要是如果您使用上述物品。
查看example of where a servlet environment is required。这里有一个Servlet过滤器用于安全性。因此需要在测试中配置过滤器。并another example where HttpServletRequest is needed