如何在Java EE中编写集成测试来测试REST端点
Java EE 生态REST端点测试工具及检索关键词说明
你之前搜索不到相关内容,大概率是缺少核心检索词,你可以尝试用JAX-RS test、Jakarta EE REST integration test、Arquillian REST test、RestAssured JAX-RS作为关键词搜索,Java EE生态的REST规范统一叫JAX-RS,后续演进版本改名为Jakarta EE后不少新文档用Jakarta作为前缀,注意区分即可。
轻量单元测试(对应Spring MockMvc能力,无需启动完整应用服务器)
- JAX-RS 实现框架自带的测试模块:Java EE生态的REST能力基于JAX-RS规范实现,常用的实现有Jersey、Resteasy,二者都提供了对应轻量测试框架:
- Jersey 对应
jersey-test-framework,可以启动内嵌的轻量Http容器,仅加载REST层相关Bean,支持Mock业务层依赖,测试速度和MockMvc基本一致 - Resteasy 对应
resteasy-testing模块,能力和Jersey的测试框架一致,适配Resteasy实现的项目
- Jersey 对应
- 示例代码(Jersey测试框架为例):
public class UserEndpointTest extends JerseyTest { // 注册待测试的Endpoint @Override protected Application configure() { return new ResourceConfig(UserEndpoint.class).register(new MockUserService()); } @Test public void testGetUser() { Response response = target("/users/1").request().get(); assertEquals(200, response.getStatus()); } }
全链路集成测试(对应Spring WebTestClient能力,加载完整运行时上下文)
- Arquillian:Java EE生态官方主流集成测试框架,支持绑定WildFly、Payara、TomEE等兼容Java EE/Jakarta EE的应用服务器,支持将测试代码和应用一起打包部署到内嵌/远程服务器,运行时上下文和生产环境完全一致,支持注入CDI Bean、JPA资源等核心组件,适合做全链路集成验证
- RestAssured:跨框架的HTTP测试工具,和WebTestClient的Fluent API风格高度相似,不需要绑定特定Java EE实现,直接通过HTTP请求调用端点做验证,迁移成本极低,示例代码:
@Test public void testCreateUser() { UserDTO user = new UserDTO("张三", "zhangsan@example.com"); given() .contentType(ContentType.JSON) .body(user) .when() .post("/api/users") .then() .statusCode(201) .body("id", notNullValue()); }
内容的提问来源于stack exchange,提问作者xetra11
相关产品推荐
相关产品推荐

