【问题标题】:How to write Mock test cases for Webtarget and Response for a rest client?如何为 Webtarget 编写 Mock 测试用例并为 rest 客户端编写响应?
【发布时间】:2018-04-21 17:50:53
【问题描述】:
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);

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

【问题讨论】:

    标签: java unit-testing mockito junit4 powermock


    【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-08
      • 2016-12-04
      • 2019-06-21
      • 2021-04-05
      • 1970-01-01
      相关资源
      最近更新 更多