无法模拟 Spring WebClient 调用

问题描述

在使用 webclient 时无法使 Mock 调用工作,我看过一些帖子,其中模拟也可以使用标头,但在我的情况下,标头失败,请求审核并感谢您的时间。

   public Mono<ClientResponse> create(Room room,String authorizationToken) {
            CreateRoomrequest createRoomrequest = new CreateRoomrequest();
            createRoomrequest.setroom(room);
            return rnWebclient.post().uri(roomCreateUri)
    .header(HttpHeaders.AUTHORIZATION,authorizationToken)//line 72
                        .body(Mono.just(createRoomrequest),CreateRoomrequest.class).exchange();
            }

在尝试模拟网络客户端调用时,我在 .header(HttpHeaders.AUTHORIZATION,authorizationToken) 处收到 NullpointerException

这是单元测试:

    @InjectMocks
    RoomUtil roomUtil;

    @Mock
    WebClient rnWebclient;

    @Mock
    RequestBodyUriSpec requestBodyUriMock;

    @Mock
    RequestBodySpec requestBodySpecmock;

    @Mock
    RequestHeadeRSSpec requestHeadeRSSpecmock;

    @Mock
    Mono<ClientResponse> monoClientResponseMock;

@Test
    public void testCreateRoom() {
        String token = "xxx";
        Mockito.when(rnWebclient.post()).thenReturn(requestBodyUriMock);
        Mockito.when(requestBodyUriMock.uri(Mockito.anyString())).thenReturn(requestBodySpecmock);
        Mockito.when(requestBodySpecmock.header(Mockito.any(),Mockito.any())).thenReturn(requestBodySpecmock);
        Mockito.when(requestBodySpecmock.body(Mockito.any(),Mockito.any(Class.class)))
                .thenReturn(requestHeadeRSSpecmock);
        Mockito.when(requestHeadeRSSpecmock.exchange()).thenReturn(monoClientResponseMock);
        Room room= new Room();
        roomUtil.create(room,token);
    }

使用 Java 1.8 Spring 依赖 2.2.2.RELEASE 使用:

implementation 'org.springframework.boot:spring-boot-starter-test'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-webflux'

日志:

java.lang.NullPointerException
    at com.danaher.roomNotification.util.RoomUtil.create(RoomUtil.java:72)
    at com.danaher.roomNotification.RoomUtilTest.testCreate(RoomUtilTest.java:63)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)