我有一个 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"));
}
}
}
最佳答案
是的,对于这两种情况,我肯定会使用两个不同的文档 ID,这样您就可以获得针对这两种情况的一组片段。
这不是必需的,但您可能还想考虑在循环中只调用 document 两次:一次用于第一次成功的调用,一次用于当您预计已达到限制时的最后一次调用。
关于java - 如何使用有条件地返回响应的 Spring REST Docs 记录 REST 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47393752/