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); } }
关键说明
- 直接注入
@AutoConfigureHttpGraphQlTester自动配置的HttpGraphQlTester,无需手动绑定到外部服务器 - 简化
userPageToReturn的创建逻辑,无需通过Flux转换,直接构建Mono即可 - 测试上下文启动的应用会自动使用
@MockBean替换后的UserData实例,执行GraphQL请求时将触发Mock逻辑返回预设响应
内容的提问来源于stack exchange,提问作者steinarey
相关产品推荐
相关产品推荐

