You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot JUnit测试:如何从WireMock返回响应并获取Token

解决Spring Boot JUnit测试中WireMock返回响应并获取Token的问题

步骤1:完善WireMock的Stub配置

你当前的WireMock Stub仅设置了响应状态和头部,缺少返回的JSON响应体。需要补充withBody()方法,返回与JWTResponse结构匹配的模拟JSON数据:

wireMockserver.stubFor(get("/authenticate/login")
        .willReturn(aResponse()
                .withStatus(HttpStatus.OK.value())
                .withHeader("Content-Type", MediaType.APPLICATION_JSON_VALUE)
                // 构造符合JWTResponse结构的模拟JSON
                .withBody("{\n" +
                        "  \"token\": \"mock-jwt-token-12345\",\n" +
                        "  \"type\": \"Bearer\",\n" +
                        "  \"refreshToken\": \"mock-refresh-token-67890\",\n" +
                        "  \"id\": 1,\n" +
                        "  \"username\": \"test-user\",\n" +
                        "  \"email\": \"test@example.com\",\n" +
                        "  \"roles\": [\"ROLE_USER\", \"ROLE_ADMIN\"]\n" +
                        "}")));

步骤2:调用WireMock接口并解析响应

在JUnit测试方法中,使用Spring的RestTemplate或WebClient发送请求到WireMock接口,将响应转换为JWTResponse对象后即可获取Token:

方式1:使用RestTemplate(同步场景)

@Test
void testLoginAndGetToken() {
    RestTemplate restTemplate = new RestTemplate();
    
    // 发送GET请求到WireMock服务地址
    String url = "http://localhost:8080/authenticate/login";
    JWTResponse jwtResponse = restTemplate.getForObject(url, JWTResponse.class);
    
    // 提取Token
    String token = jwtResponse.getToken();
    // 可添加断言验证结果
    assertNotNull(token);
}

方式2:使用WebClient(响应式场景)

如果项目采用响应式架构,可使用WebClient:

@Test
void testLoginAndGetTokenWithWebClient() {
    WebClient webClient = WebClient.create("http://localhost:8080");
    
    JWTResponse jwtResponse = webClient.get()
            .uri("/authenticate/login")
            .retrieve()
            .bodyToMono(JWTResponse.class)
            .block(); // 测试场景下阻塞获取结果
    
    String token = jwtResponse.getToken();
    assertNotNull(token);
}

关键注意点

  • 确保WireMock配置的端口(8080)与测试请求的端口一致;
  • 模拟JSON的字段名、数据类型必须和JWTResponse类的属性完全匹配;
  • 若JWTResponse的type字段有默认值,模拟JSON中可省略该字段,Jackson会自动填充默认值。

内容的提问来源于stack exchange,提问作者Sercan Noyan Germiyanoğlu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 14:10:16