mocked функция возвращает ноль после указания возврата - PullRequest
0 голосов
/ 01 апреля 2020

Тестовый код

    @Mock
    private RestTemplate restTemplate;

    @InjectMocks
    private ServiceClient client;

    @Test
    public void getDocument() throws IOException {
        String fileExtension = "fileextension";
        String host = "docserverurl";
        String path = "path";
        String content = "content";

        client = new ServiceClient(restTemplate, host, fileExtension);
        when(restTemplate.getForEntity(any(), any()))
                .thenReturn(new ResponseEntity(content, HttpStatus.OK));
        assertEquals(content, new String(client.getDocument(path)));
    }

и тестируемый код

    public byte[] getDocument(String path) throws IOException {
        path = suffixWithExtension(path);
        return restTemplate.getForEntity(docServiceHost + DOC_SERVICE_API_VERSION_DEFAULT + DOCUMENT + path, byte[].class).getBody();
    }

По какой-то причине у меня возникает проблема, когда при вызове функции getForEntity в в тестируемой функции она возвращает нулевое значение вместо смоделированного ответа.

1 Ответ

1 голос
/ 01 апреля 2020

Попробуйте это. Это должно работать.

byte[] content = "content".getBytes();
when(restTemplate.getForEntity(anyString(), any()))
                .thenReturn(new ResponseEntity(content, HttpStatus.OK));
final byte[] sds = someClass.getDocument("sd");
assertEquals(new String(content), new String(sds));

Несколько советов. Если вы делаете это

client = new ServiceClient(restTemplate, host, fileExtension);

, вам не нужно @InjectMocks. Это избыточно. Рекомендуется использовать инъекции конструктора, а не полевые инъекции и @InjectMocks.

Надеюсь, вы издевались над Моксами. Это делается с помощью

MockitoAnnotations.initMocks(this);

Это также выполняется с помощью некоторых классов Runner (если вы их используете)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...