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

Spring Boot GraphQL中无法Mock业务服务的问题求助

Spring Boot GraphQL Mock UserData服务未生效的解决办法

问题原因

测试中使用WebTestClient.bindToServer()直接连接真实运行的localhost:8091服务器,此时测试上下文通过@MockBean替换的UserData并未被真实服务器使用——真实服务器仍加载原有的UserData实例,导致Mock逻辑不生效。

解决方案

放弃直接连接外部服务器,利用Spring Boot Test的上下文特性,让HttpGraphQlTester使用测试上下文内的应用实例,确保@MockBean的替换逻辑生效。

修改后的测试代码

@Slf4j
@SpringBootTest
@ActiveProfiles("local")
@ExtendWith(MockitoExtension.class)
@AutoConfigureHttpGraphQlTester
public class UserTests {

    @MockBean
    private UserData userData;

    @Autowired
    private HttpGraphQlTester graphQlTester;

    @Test
    @DisplayName("Get users")
    public void testGetUsers() {
        var usersToReturn = List.of(
                User.builder().name("Test User").build(),
                User.builder().name("Test User 2").build()
        );

        PageInfo pageInfo = new PageInfo(1, 1, 1, 1, 1, true, true);
        Mono<UserPage> userPageToReturn = Mono.just(new UserPage(usersToReturn, pageInfo));

        given(userData.getUsers(any(), any(), any())).willReturn(userPageToReturn);

        var userPage = graphQlTester.documentName("top5users")
                .execute()
                .path("userPage")
                .entity(UserPage.class)
                .get();

        assertThat(userPage.users()).isNotNull();
        assertThat(userPage.users().size()).isEqualTo(2);
    }
}

关键说明

  1. 直接注入@AutoConfigureHttpGraphQlTester自动配置的HttpGraphQlTester,无需手动绑定到外部服务器
  2. 简化userPageToReturn的创建逻辑,无需通过Flux转换,直接构建Mono即可
  3. 测试上下文启动的应用会自动使用@MockBean替换后的UserData实例,执行GraphQL请求时将触发Mock逻辑返回预设响应

内容的提问来源于stack exchange,提问作者steinarey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 21:43:21