如何为其余客户端编写 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);
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);