Как написать Mock тестовые примеры для Webtarget и Response для клиента отдыха?

APJ спросил: 28 марта 2018 в 04:10 в: java
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 ответ

Есть решение
Nkosi ответил: 28 марта 2018 в 05:31

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);
APJ ответил: 29 марта 2018 в 04:54
Спасибо сработало