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

3
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个回答

2

eq(anyString()) is the problem in

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接