Как документировать службы REST с помощью Spring REST Docs, которые условно возвращают ответ?

У меня есть служба REST с ограничением доступа для каждого ресурса. Допустим, у меня есть следующий сервис:

ПОЛУЧИТЬ /запись/{recordId}

Определяется количество доступов для каждой записи, и при достижении предела возвращается исключение.

Я написал интеграционный тест, который создает запись с ограничением доступа 5, а затем создает цикл, который отправляет запросы через mockMvc.

Когда я смотрю на примеры в Spring REST Docs, я вижу, что .andDo(...) добавляется сразу после теста, который создает фрагменты для теста. Я боюсь, что это перезапишет фрагменты одного и того же теста. Я хочу задокументировать, что ресурс имеет ограничения доступа для каждого идентификатора ресурса, и привести пример, когда ресурс доступен и когда достигнут предел доступа.

Должен ли я использовать 2 идентификатора документа для этих случаев (см. ниже)? Это правильный подход?

@Test
public void testWithLimit(final String recordId, final String value, final int limit) throws Exception {
    for (int i = 0; i < limit; i++) {
        final ResultActions test = mockMvc.perform(get("/record/" + recordId));

        if (i < limit) {
            test.andExpect(status().isFound())
                .andExpect(jsonValue("$.value").exists())
                .andDo(document("resource-accessible"));
        } else {
            test.andExpect(status().isGone())
                .andExpect(validateException(RecordLimitExceededException.class))
                .andDo(document("resource-access-limit-reached"));
        }
    }
}

person tunix    schedule 20.11.2017    source источник


Ответы (1)


Да, я бы определенно использовал два разных идентификатора документа для этих двух случаев, чтобы вы получили набор фрагментов для обоих.

Это не обязательно, но вы также можете рассмотреть возможность вызова document только дважды в цикле: один раз для первого вызова, который будет успешным, а затем один раз для последнего вызова, когда вы ожидаете, что лимит будет достигнут.

person Andy Wilkinson    schedule 21.11.2017
comment
Привет, Энди, я не могу задокументировать ответ об ошибке, так как это фиктивная среда mvc. Я пробовал использовать RANDOM_PORT и TestRestTemplate, но в этом случае document() просто ничего не генерирует. Похоже, для этого требуется mockMvcResult. Любые идеи? - person tunix; 29.11.2017
comment
Вы можете рассмотреть возможность использования Spring REST Docs с REST Assured. Это позволяет вам документировать API, отправляя HTTP-запросы на реальный сервер. - person Andy Wilkinson; 30.11.2017
comment
Чем REST Assured отличается от использования TestRestTemplate? Я думал, что TestRestTemplate тоже делает запросы. - person tunix; 02.12.2017
comment
REST Docs поддерживает REST Assured. Он не поддерживает TestRestTemplate. - person Andy Wilkinson; 03.12.2017