如何在Spring 5中使用webtestclient为服务组件类编写Junit

时间:2018-07-19 06:27:48

标签: junit webclient spring-webflux

我在Java微服务中使用Springboot2,Spring5和react-webflux。 我有一个要使用webtestclient测试的服务类:-

@Service("authenticationProvider")
public class CommonAuthenticationProvider implements AuthenticationProvider {

 @Override
  public AccessToken getUserAccessToken(Tuple2<String, WebClient> serviceConnectionDetails, MultiValueMap<String, String> queryParams) {

    return serviceConnectionDetails._2
        .post()
        .uri(builder -> builder
            .path(serviceConnectionDetails._1)
            .queryParams(queryParams)
            .build())
        .accept(MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML)
        .retrieve()
        .bodyToMono(AccessToken.class)
        .block();

  }
}

此处serviceConnectionDetails._2是一个Web客户端实例。我想编写一个JUnit测试来模拟此webclient并测试方法getUserAccessToken()。请帮忙,因为我尝试了很多东西,例如mockmvc,mockRestServiceServer,但没有任何效果。后来我才知道,我不能使用模拟嘲笑服务服务器,因为它曾经模拟过RestTemplate而不是WebClient。我可以使用webtestclient测试控制器类方法,但不能在服务类中测试

1 个答案:

答案 0 :(得分:0)

在将来的MockRestServiceServer版本的Spring Framework中应该支持此功能;参见SPR-15286

目前,唯一的解决方案是为此使用单独的库,例如okhttp的MockWebServer