问题标签 [jersey-test-framework]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
396 浏览

java - 带有 Jersey 测试框架的 jUnit 测试单独运行,但不能一起运行

我正在运行 jersey-test-framework-provider-inmemory 和 jersey-test-framework-core 两个版本 2.26。

我遇到的问题是我能够自己运行每个测试并且它们按预期运行。但是,每当我同时运行这三个测试时,其中两个总是返回 404,而我期待 200。

正在测试的 API 调用外部 XML API 并将数据转换为 JSON 返回给客户端。

我不能为我的生活锻炼为什么这些测试作为一个群体失败了。

我的代码是:

任何意见或建议将不胜感激。

0 投票
1 回答
3175 浏览

java - Jackson LocalDate/Time 反序列化

我配置了杰克逊,以便它给我一个简单的字符串表示 ifjava.time.LocalDatejava.time.LocalDateTime. 这可以在序列化过程中找到,例如当我在 REST api 上获取数据时。

但反过来也行不通。当我尝试将数据发送到服务器并且应该将 JSON 解析为 java 对象时,会引发此异常:

javax.ws.rs.client.ResponseProcessingException:com.fasterxml.jackson.databind.JsonMappingException:无法构造 java.time.LocalDateTime 的实例:没有从字符串值反序列化的字符串参数构造函数/工厂方法('2018-04- 19T14:10:30.903')

经过几个小时的研究,我设法让它工作,但只有我用@JsonDeserialize(using = LocalDateDeserializer.class)@JsonDeserialize(using = LocalDateTimeDeserializer.class)分别注释的属性。

在我看来,如果我可以在一个中心位置定义这些映射,那将是理想的。

对象映射器配置:

我尝试将自定义反序列化器添加到 JavaTimeModule,但没有成功:

长话短说:有没有办法在全局范围内定义映射,这样我就不需要在每个字段上添加这些注释。谢谢!

编辑:

好吧:我用邮递员测试了它,没有注释,它按预期工作。但是,当我运行单元测试 (JerseyTest) 时,它会引发上述异常。我将其注册ObjectMapperContextResolver到测试应用程序,但可能我遗漏了一些东西。

很抱歉没有提到我参加了单元测试。

测试类:

0 投票
1 回答
134 浏览

java - javax.ws.rs REST 目标测试 - 在哪里获取或设置服务器地址?

我在哪里对 javax.ws.rs 中创建的 REST 函数进行单元测试,并使用 target() 作为 URL,如https://stackoverflow.com/a/28726499/715269,我不知道如何设置URL 的服务器部分。

如果我以硬方式设置它,则测试将仅在一个环境中运行,例如在发布服务器上。但通常,我在任何服务器上运行应用程序,API 函数在不同的服务器上工作,这取决于我启动应用程序的位置。

如果我不为目标设置任何服务器:

并查找响应的 URI,我看到那里设置了一些服务器部分(http://localhost:9998/),但我不知道它来自哪里,而且这个模仿的服务器不知道targetUrl字符串中的 API 函数。

我应该如何编写这部分单元测试,以便普遍运行?

我认为可能覆盖 configure() 方法可能会有所帮助,但我不确定。

0 投票
1 回答
1247 浏览

java - Jersey Test + HK2 + Inject Factory 服务

我正在尝试在 Jersey 测试类中注入 HK2 Factory 服务提供的对象,但得到不满足的依赖项异常。

我有如下工厂服务

还有一个泽西测试课

并低于例外

MultiException 有 3 个异常。他们是:

  1. org.glassfish.hk2.api.UnsatisfiedDependencyException:SystemInjecteeImpl 没有可用于注入的对象(r​​equiredType=CloseableService,parent=TestFactory,qualifiers={},position=0,optional=false,self=false,unqualified=null,2053349061 )
  2. java.lang.IllegalArgumentException:在尝试解决 com.test.factories.TestFactory 的依赖项时发现错误
  3. java.lang.IllegalStateException:无法执行操作:在 com.test.factories.TestFactory 上解析
0 投票
1 回答
2508 浏览

java - javax.ws.rs.NotFoundException:未找到 junit+jersy 测试框架的 HTTP 404

如果我在 configure() 中不使用 JerseyConfig.class,它会说 no injection file found 。

我正在编写单元测试用例来测试 rest api 并点击获取请求,我正在模拟服务


请在这里帮我解决它?提前谢谢。如果需要任何其他信息,请发表评论。另外,有人可以解释为什么我们需要覆盖 configure() 方法吗?

0 投票
0 回答
455 浏览

java - 我可以将响应实体作为 JSONObject 传递,而不是创建一个字符串吗?

我正在为它们制作示例 Rest 函数和测试。

其余函数看起来是这样的:

我试图以三种方式传递响应——作为 POJO、作为字符串和作为 JSONObject。

读取结果的测试函数是:

String 和 POJO 变体都可以通过测试启动并返回有序状态 200。如果我 return JSONObject,当我检查该return Response.status(200).entity(jsonObject).build()行时,它也会创建正确的响应。但是当进程到达标记线时,它会失败:响应状态为 400。如果我readEntity(String.class),我得到:

没有为类 org.json.JSONObject 找到序列化程序,也没有发现创建 BeanSerializer 的属性(为避免异常,请禁用 SerializationFeature.FAIL_ON_EMPTY_BEANS)

我的 Maven 依赖项是:

我正在寻找一个简单的解决方案。添加 .register(JacksonFeature.class) - 没关系(真的没有帮助)。但我不想创建一些大型的附加类。我


编辑关于假定的重复:
这个问题与JSONObject 作为 POJO 中的成员变量不被识别 -Jersey完全不同,因为:

  • 问题在于 POJO 中的 JSONObject 不起作用,而问题在于 JSONObject 不起作用而 POJO 起作用。而 JSONObject 不在 POJO 中。
  • 那里没有提到问题消息。
  • 那里的问题不是关于测试和/或 JerseyTest

保罗对上述问题的回答与这个问题更相关。至少,它是关于 JerseyTest 的。但是答案中的想法不能在这里使用。建议的依赖项使 REST 调用在 500 而不是 400 上失败。register(JacksonFeature.class)根本不要改变行为。并且建议的映射器必须获取映射类型的类。这正是我想要逃避的。无论如何,即使它适用,答案的接近并不意味着问题的重复。

0 投票
2 回答
1825 浏览

java - 带有 Jersey 测试和 JAX-RS 的 Mockito - UnsatisfiedDependencyException

尝试测试一个相当简单的 JAX-RS 端点

使用 Mockito 和 Jersey 测试

Grizzly 容器正在返回一个org.glassfish.hk2.api.UnsatisfiedDependencyExceptionfor LoggerEjbService甚至认为 Mockito 正确注入了依赖项。

似乎灰熊正试图正确地超越 Mockito 模拟。如果我AbstractBinderconfigure方法中注册一个,一切正常。

但我不认为这是完成注射的最佳方式。Mockito 风格更好恕我直言。我需要做什么来解决这个问题?

0 投票
1 回答
1423 浏览

dependency-injection - 使用 Jersey 测试框架进行 JUnit 测试中的 CDI

我们正在使用 Jersey 测试框架进行 API 测试。在测试模式下,我们在生产中使用 h2 数据库 mysql。到目前为止一切都很好。

现在我想为我们的存储库编写测试以检查数据是否正确写入数据库。

我不能在我的测试中注入任何类,所以我使用标准构造函数来创建 RepositoryA 的新实例。为我工作。

现在的问题是:RepositoryA 现在正在注入 RepositoryB 的一个实例。并且注入不适用于测试范围。

是否可以在这种环境中运行注入?

0 投票
1 回答
520 浏览

java - 使用 Guice 注入对 JAX-RS/Jersey servlet 进行单元测试

我有一个应用程序将 Jersey/JAX-RS 用于 Web 服务(注释等)和 Guice 来注入服务实现。我不太喜欢 Guice 直接使用 servlet 的方式,我更喜欢 Jersey 方式,所以我不得不做一些小题大做才能让服务注入工作,因为 Guice 不会创建我的 servlet 类,而我没有不想处理HK2-Guice桥。我通过创建一个侦听器类(称为配置)在应用程序启动时在静态字段中设置注入器来做到这一点,然后通过创建一个父类来手动影响每个 servlet 类中的注入,我的所有 servlet 使用包含以下内容的构造函数扩展该父类:

我知道这有点 hacky,但这在我的 servlet 中工作得很好。我可以在我的服务上使用 Guice @Inject 注释并在命名实现之间切换等等。当我去设置我的单元测试时,问题就来了。我正在使用 JerseyTest 进行测试,但是针对我的 servlet 运行测试会导致 Guice 出现 500 错误,如下所示:

com.google.inject.ConfigurationException:Guice 配置错误:1) 没有绑定 com.mycompany.MyService 的实现。在为 com.mycompany.servlet.TestGetServlet.service(TestGetServlet.java:21) 的字段定位 com.mycompany.MyService 的同时定位 com.mycompany.servlet.TestGetServlet

测试看起来像这样:

您会注意到在 setup 方法中我手动创建了我的 Configuration 类,因为我不能依赖测试容器(Grizzly)来创建它(我得到 NullPointerExceptions 没有这两行)。下面有更多关于这个的信息。

这是正在测试的 servlet:

注意 testGet() 方法中的注释行吗?如果我这样做并删除上面的 @Inject 注释,一切正常,这表明 Grizzly 没有按照我期望的方式创建我的 servlet。

我认为正在发生的事情是灰熊不知道Guice。一切似乎都表明 Grizzly 没有看到 Configuration 类,尽管通过将它放在我的测试的 @Before 方法中,它似乎至少可供使用它的类使用(参见:TestGetServlet 类中的注释行)。我只是不知道如何解决它。

0 投票
0 回答
492 浏览

java - 尽管不遵守 JAX-RS 规则,@GET 方法中的 @QueryParam/@PathParam 参数仍然有效

我在一个类中定义了 JAX-RS API 端点。我在课堂上有方法,例如

现在,根据https://docs.oracle.com/cd/E19776-01/820-4867/6nga7f5n6/index.html上的文档,@QueryParam 和 @PathParam 只能用于以下 Java 类型:

在代码库中,MyClass1不要MyClass2遵循上述任何一项,但在 PROD 上一切正常。但是当我尝试使用 Jersey Test 框架测试相同的方法时,jersey 在启动时给了我异常:

@PathParams/@QueryParams在进一步挖掘中,我发现我的绑定需要上述条件MyClass1MyClass2。我提供了一个带有单个 String 参数的公共构造函数,MyClass1问题部分消失了。我尝试了同样的方法,MyClass2但问题仍然存在。MyClass2是一个静态内部类,它也有一个父类。所以这是我的问题:

  1. 它如何在 PROD 上正常工作但在 JUnit 测试中抱怨?
  2. 对于用于绑定的静态内部类是否有任何特殊考虑@PathParams/@QueryParams?我给静态内部类提供了一个带有单个 String arg 的公共构造函数,但问题仍然存在,而另一个类 ( MyClass1) 它工作。有什么我想念的吗?

谢谢!