如何使用有条件地返回响应的Spring REST Docs来记录REST服务?

时间:2017-11-20 13:58:05

标签: java spring rest spring-mvc spring-restdocs

我有一个REST服务,每个资源都有一个访问限制。假设我有以下服务:

  

GET / record / {recordId}

定义每条记录的访问计数,当达到限制时,它将返回异常。

我编写了一个集成测试,创建了访问限制为5的记录,然后创建了一个通过mockMvc发送请求的循环。

当我查看Spring REST Docs中的示例时,我看到.andDo(...)是在测试之后添加的,它为测试创建了片段。我担心它会覆盖同一个测试的片段。我想记录资源是否具有每个resourceId的访问限制,并在资源可访问和达到访问限制时提供示例。

我是否应该为这些案例使用2个文件ID(见下文)?这是正确的做法吗?

@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"));
        }
    }
}

1 个答案:

答案 0 :(得分:1)

是的,我肯定会为这两种情况使用两种不同的文档ID,以便为这两种情况提供一组代码段。

没有必要,但您可能还想考虑仅在循环中调用文档两次:第一次调用将成功,然后一次用于最终调用,此时您希望达到限制。