Spring Cloud gateway 单元测试,模拟http请求,并mock

Spring Cloud gateway使用的是reactive,使用WebTestClient模拟发送请求。

待测试的方法如下,方法中会访问其它的服务,在单元测试时,我们要把这个语法mock掉。

public class EmployeeService {
    private WebClient.Builder webClient;
    public Mono<Employee> getEmployeeById(Integer employeeId) {
        return webClient
                .get()
                .uri("http://auth_user/v2/role/resources")
                .retrieve()
                .bodyToMono(Employee.class);
    }
}
@SpringBootTest(webEnvironment = RANDOM_PORT)
@ExtendWith(MockitoExtension.class)
public class GatewayTests {

    protected static WebTestClient webClient;
    @MockBean
    private WebClient webClientMock;
    @MockBean
    private WebClient.RequestHeadersSpec requestHeadersMock;
    @MockBean
    private WebClient.RequestHeadersUriSpec requestHeadersUriMock;
    @MockBean
    private WebClient.ResponseSpec responseMock;
	@LocalServerPort
    protected int port = 0;
    
    @BeforeEach
    public void setup()
    {
        String baseUri = "http://localhost:"+ port;
        webClient = WebTestClient.bindToServer()
                .baseUrl(baseUri)
                .responseTimeout(Duration.ofSeconds(12))
                .build();
    }

    /**
     * 测试
     */
    @Test
    public void test()  {
        GotRoleResourceDTO dto = new GotRoleResourceDTO();
        dto.setMethod("post");
        dto.setRoleId("ROLE-test");
        dto.setUrl("/auth_user/v2/test503");
        List<GotRoleResourceDTO> list = new ArrayList<>();
        list.add(dto);
        when(webClientBuilderMock.build()).thenReturn(webClientMock);

        when(webClientMock.get())
                .thenReturn(requestHeadersUriMock);
        when(requestHeadersUriMock.uri("http://auth_user/v2/role/resources")).thenReturn(requestHeadersMock);
        when(requestHeadersMock.retrieve()).thenReturn(responseMock);
        when(responseMock.bodyToFlux(GotRoleResourceDTO.class)).thenReturn(Flux.just(dto));


        webTestClient.get().uri("/auth_user/v2/test503")
                .header("Authorization","Bearer "+TOKEN)
                .exchange()
                .expectStatus().isEqualTo(503)
                .expectBody(String.class).consumeWith(result ->{
            String body = result.getResponseBody();
            log.debug("body:{}",body);
        });

    }

}

官方例子

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Spring Cloud提供了许多用于单元测试的工具和框架,可以帮助我们测试和验证我们的微服务应用。下面是一些常用的Spring Cloud单元测试的方法和工具: 1. 使用MockMvc进行Controller层的单元测试: 可以使用Spring MVC的测试框架MockMvc来模拟HTTP请求和验证响应结果。通过使用MockMvc,我们可以针对每个Controller的请求路径进行单元测试,验证接口的正确性。 2. 使用@SpringBootTest注解进行集成测试: 使用@SpringBootTest注解可以方便地进行Spring Boot应用的集成测试。该注解会加载整个应用的上下文,并且支持自动配置,可以在测试中使用真实的依赖。 3. 使用@MockBean注解模拟依赖: @MockBean注解可以模拟依赖的Bean,用于测试时替换真实的依赖。通过使用@MockBean注解,我们可以控制被测系统与外部依赖之间的交互,以便更好地进行单元测试。 4. 使用TestRestTemplate进行服务端到服务端的集成测试: TestRestTemplate是Spring提供的用于进行服务端到服务端的集成测试的工具。我们可以使用TestRestTemplate发送HTTP请求到服务端,并验证响应结果。这对于测试微服务之间的通信非常有用。 除了上述方法和工具外,还有很多其他的测试技术可以与Spring Cloud一起使用,如使用JUnitMockito进行单元测试,使用Selenium进行UI测试等。根据具体的需求,选择适合的测试方法和工具进行单元测试

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiegwei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值