SpringCloud 在服务器端执行自定义方法
2023-12-13 09:47 更新
本部分仅对Groovy DSL有效。请查看 “匹配器节中的动态Properties”一节,以获取类似功能的YAML示例。
您可以定义在测试期间在服务器端执行的方法调用。可以将这种方法添加到配置中定义为“ baseClassForTests”的类中。以下代码显示了测试用例的合同部分的示例:
org.springframework.cloud.contract.spec.Contract.make { request { method 'PUT' url $(consumer(regex('^/api/[0-9]{2}$')), producer('/api/12')) headers { header 'Content-Type': 'application/json' } body '''\ [{ "text": "Gonna see you at Warsaw" }] ''' } response { body( path: $(consumer('/api/12'), producer(regex('^/api/[0-9]{2}$'))), correlationId: $(consumer('1223456'), producer(execute('isProperCorrelationId($it)'))) ) status OK() } }
以下代码显示了测试用例的基类部分:
abstract class BaseMockMvcSpec extends Specification { def setup() { RestAssuredMockMvc.standaloneSetup(new PairIdController()) } void isProperCorrelationId(Integer correlationId) { assert correlationId == 123456 } void isEmpty(String value) { assert value == null } }
您不能同时使用String和
execute
来执行串联。例如,呼叫header('Authorization', 'Bearer ' + execute('authToken()'))
会导致不正确的结果。而是调用header('Authorization', execute('authToken()'))
并确保authToken()
方法返回您需要的所有内容。
从JSON读取的对象的类型可以是以下之一,具体取决于JSON路径:
String
:如果您指向JSON中的String
值。JSONArray
:如果您指向JSON中的List
。Map
:如果您指向JSON中的Map
。Number
:如果您指向JSON中的Integer
,Double
等。Boolean
:如果您指向JSON中的Boolean
。
在合同的请求部分,您可以指定body
应该从方法中获取。
您必须同时提供消费者和生产方。
execute
部分适用于整个身体-不适用于部分身体。
以下示例显示如何从JSON读取对象:
Contract contractDsl = Contract.make { request { method 'GET' url '/something' body( $(c('foo'), p(execute('hashCode()'))) ) } response { status OK() } }
前面的示例导致在请求正文中调用hashCode()
方法。它应类似于以下代码:
// given: MockMvcRequestSpecification request = given() .body(hashCode()); // when: ResponseOptions response = given().spec(request) .get("/something"); // then: assertThat(response.statusCode()).isEqualTo(200);
以上内容是否对您有帮助:
更多建议: