使用mockMvc,Spring restDocs和Spring云使用以下@Test
代码进行压缩:
var adminDTO = HandlerTestObjectGenerator.createRandomAdminDTO();
mockMvc.perform(
RestDocumentationRequestBuilders
.post("/api/admins")
.content(objectMapper.writeValueAsString(adminDTO))
.contentType(MediaType.APPLICATION_JSON_UTF8)
).andExpect(status().isCreated())
.andDo(document("create-admin",
preprocessRequest(),
preprocessResponse(),
requestFields(
usernameFieldDescriptor,
passwordFieldDescriptor,
rolesFieldDescriptor
),
responseFields(
admin_adminIdFieldDescriptor,
admin_usernameFieldDescriptor,
admin_rolesFieldDescriptor
),
SpringCloudContractRestDocs.dslContract()
));
我得到了以下常规合同:
Contract.make {
request {
method 'POST'
url '/api/admins'
body('''{
"username" : "6ddfee05-75c2-4cdb-b35e-668e79226e92",
"password" : "91a96b76-283f-44eb-b6cc-72945872b287",
"roles" : [ "ADMIN" ]
}''')
...
username
和password
的请求正文值被硬编码在常规合同中,从而使它们在消费者方面不可预测。
我希望进行正则表达式模式验证,而不是对其进行硬编码,因此任何有效的输入都将返回合同的响应。
可以做到吗? 请按我提供的文档提供具体代码。