问题描述
在使用 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 (将#修改为@)