如何为其余客户端编写 Webtarget 和 Response 的 Mock 测试用例?

How to write Mock test cases for Webtarget and Response for a rest client?

WebTarget resource = clientLocal.target(/test/url))
Response response = resource.request(MediaType.APPLICATION_JSON)
                    .header("Content-type", MediaType.APPLICATION_JSON)
                    .header("Authorization", "Basic"+" "+"234YML")
                    .post(Entity.entity("", MediaType.TEXT_PLAIN), Response.class);
responseEntity = response.readEntity(Test.class);

Response object 被 mock 时,授权 header 的 builder object 是 returning null,

Mockito.when(mockWebTarget.request(MediaType.APPLICATION_JSON)).thenReturn(mockBuilder);
Mockito.when(mockBuilder.header("Content-type", MediaType.APPLICATION_JSON))
        .thenReturn(mockBuilder);
Mockito.when(mockBuilder.header("Authorization",eq(anyString())))
        .thenReturn(mockBuilder);
Mockito.when(mockBuilder.post(Entity.entity(anyString(), MediaType.TEXT_PLAIN), eq(Response.class)))
        .thenReturn(mockResponse);

如何模拟 header 的第二部分,使其不 return null 值?

eq(anyString())

中的问题
Mockito.when(mockBuilder.header("Authorization",eq(anyString())))
    .thenReturn(mockBuilder);

应该是

Mockito.when(mockBuilder.header(eq("Authorization"), anyString()))
    .thenReturn(mockBuilder);

参数匹配器 eq 用于文字匹配。

此外,如果您使用参数匹配器,所有参数 都必须由匹配器提供。

第一个有效,因为所有参数都是文字值。

这也意味着

Mockito.when(mockBuilder.post(Entity.entity(anyString(), MediaType.TEXT_PLAIN), eq(Response.class)))
    .thenReturn(mockResponse);

需要改为

Mockito.when(mockBuilder.post(any(Entity.class), eq(Response.class)))
    .thenReturn(mockResponse);