如何为其他客户端编写Webtarget和Response的模拟测试用例?

时间:2018-04-21 17:50:53

标签: java unit-testing mockito junit4 powermock

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对象时,授权标头的builder对象返回 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);

如何模拟标题的第二部分,使其不返回 null 值?

1 个答案:

答案 0 :(得分:1)

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);