【发布时间】:2018-05-07 16:21:57
【问题描述】:
我最近实现了简单的 JAX-RS REST 端点。我想知道是否有任何透明的集成测试方式?
我在stackowerflow上搜索了一下,发现了这些问题:first,second。它们有点过时了,我希望已经有一些更好的测试方法。那里提出的解决方案并不能解决我的问题,因为它们提供了特定于供应商的方式或一些复杂的第三方方式。
问:测试 JAX-RS 服务的现代方法是什么? Java EE 是否为此提供了解决方案?或者一般来说,在 Java EE 生态系统中编写控制器测试的最佳方式是什么?
更具体地说,我正在寻找一种可以轻松测试 REST 调用的方法。在spring框架中通常是这样的:
@Autowired
MockMvc mvc;
@MockBean
MyService service;
@Test
public void shouldGetMyDto() {
MyDto dto = new MyDto("test-id", "test-name");
given(service.getMyDto("test-id")).willReturn(dto);
mvc.perform(get("/api/my-entities/test-id"))
.andExpect(status().isOk())
.andExpect(content().contentType(APPLICATION_JSON_UTF8_VALUE))
.andExpect(jsonPath("$.id", is("test-id")))
.andExpect(jsonPath("$.name", is("test-name")));
verify(service).getMyDto("test-id");
}
【问题讨论】:
-
你说的是单元测试还是集成测试?您的示例是单元测试。 jaxrs-people 有一个纯 JavaEE JAX-RS 集成测试的示例。
-
@SteveC 感谢您的提示,我将使用它进行端到端测试。但这不是我现在要寻找的。在您的示例中,您建立了我不需要的功能齐全的应用程序运行。我只需要检查 JAX-RS 是否已正确集成,这意味着我需要检查 DTO 是否被转换为正确的 json,是否返回了正确的内容类型,状态代码是否正常,并且正在调用正确的服务方法。当然,在这种情况下我不需要完全建立的服务 - 所以我想以某种方式模拟它。这就是我要找的。span>
-
您使用哪些 DI 和 REST 框架?
-
@Justas 我刚刚生成了默认的 Wildfly Swarm 项目。我猜它使用 Weld 作为 CDI 容器和 RESTEasy。
标签: java rest jakarta-ee junit jax-rs