我需要使用 Pact 测试和 REST Assured 检查 /meeting/id 类型的 api。id 可能会更改,我想在测试之前创建一个项目并注入他们的 id 以覆盖作为合同 url 路径的一部分设置的内容,但不知道该怎么做?
这是我的消费者:
@ExtendWith(PactConsumerTestExt.class)
public class PactConsumerTest {
Map<String, String> headers = new HashMap<>();
String storeMeetingPath = "/meeting/256";
@Pact(provider = VC, consumer = ED_UI)
public RequestResponsePact createPact(PactDslWithProvider builder) {
headers.put("Content-Type", "application/json");
headers.put("Accept", "application/json");
return builder
.given("A request to retrieve a meeting for a user")
.uponReceiving("A request to retrieve a meeting for a user")
.path(storeMeetingPath)
.method("GET")
.headers(headers)
.willRespondWith()
.body(new PactDslJsonBody()
.integerType("meetingId", 3)
.stringType("meetingTitle", "My title")
.stringType("meetingDescription", "My description"))
.status(200)
.toPact();
}
@Test
@PactTestFor(providerName = VC, port = "8080")
public void runTest() {
//Mock url
RestAssured.baseURI = "http://localhost:8080";
RequestSpecification rq = RestAssured
.given()
.headers(headers)
.when();
rq.get(storeMeetingPath);
}
}
这里是我的提供者:
@Provider(VC)
@PactFolder("target/pacts")
public class PactProviderTest {
@TestTemplate
@ExtendWith(PactVerificationInvocationContextProvider.class)
void pactTestTemplate(PactVerificationContext context, HttpRequest request) {
request.addHeader("Authorization", AUTHORIZATION_TOKEN);
context.verifyInteraction();
}
@BeforeEach
void before(PactVerificationContext context) {
context.setTarget(new HttpsTestTarget(getBasePactEndpoint(), 443, "/"));
// Will create a meeting and retrieve the id from here but how to use this to overwrite what is there on the consumer?
getAuthorizationToken(UserType.TEACHER);
}
@State("A request to retrieve a meeting for a user")
public void sampleState() {
}
}
非常感谢你。