SpringCloud 在一个文件中多个Contracts
2023-12-13 11:56 更新
您可以在一个文件中定义多个合同。这样的合同可能类似于以下示例:
Groovy DSL。
import org.springframework.cloud.contract.spec.Contract [ Contract.make { name("should post a user") request { method 'POST' url('/users/1') } response { status OK() } }, Contract.make { request { method 'POST' url('/users/2') } response { status OK() } } ]
YAML。
--- name: should post a user request: method: POST url: /users/1 response: status: 200 --- request: method: POST url: /users/2 response: status: 200 --- request: method: POST url: /users/3 response: status: 200
在前面的示例中,一个合同具有name
字段,而另一个则没有。这导致生成两个看起来或多或少像这样的测试:
package org.springframework.cloud.contract.verifier.tests.com.hello; import com.example.TestBase; import com.jayway.jsonpath.DocumentContext; import com.jayway.jsonpath.JsonPath; import com.jayway.restassured.module.mockmvc.specification.MockMvcRequestSpecification; import com.jayway.restassured.response.ResponseOptions; import org.junit.Test; import static com.jayway.restassured.module.mockmvc.RestAssuredMockMvc.*; import static com.toomuchcoding.jsonassert.JsonAssertion.assertThatJson; import static org.assertj.core.api.Assertions.assertThat; public class V1Test extends TestBase { @Test public void validate_should_post_a_user() throws Exception { // given: MockMvcRequestSpecification request = given(); // when: ResponseOptions response = given().spec(request) .post("/users/1"); // then: assertThat(response.statusCode()).isEqualTo(200); } @Test public void validate_withList_1() throws Exception { // given: MockMvcRequestSpecification request = given(); // when: ResponseOptions response = given().spec(request) .post("/users/2"); // then: assertThat(response.statusCode()).isEqualTo(200); } }
请注意,对于具有name
字段的合同,生成的测试方法名为validate_should_post_a_user
。对于一个没有名称的名称,它称为validate_withList_1
。它对应于文件WithList.groovy
的名称以及列表中合同的索引。
下例显示了生成的存根:
should post a user.json 1_WithList.json
如您所见,第一个文件从合同中获取了name
参数。第二个名称带有合同文件名称(WithList.groovy
),并带有索引前缀(在这种情况下,合同在文件中合同列表中的索引为1
)。
如您所见,命名合同会更好,因为这样做会使您的测试更有意义。
以上内容是否对您有帮助:
更多建议: