我遇到的情况是我可以将合同作为.json文件访问,但尚未发布,因此可能要花一些时间。我想开始为此编写验证测试,因此是否考虑将文件手动粘贴到协定/文件夹下并连接到它而不是在线代理?我想我以前在某处已经看到过这样的事情。这真的有可能吗?如果可以,请给我样品吗?非常感谢。
答案 0 :(得分:2)
在这里回答我自己的问题。可以通过生成或手动将由消费者创建的.json文件粘贴到target / pacts文件夹下,并添加@PactFolder(“ target / pacts”)注释来替代代理路径来实现。
import au.com.dius.pact.provider.junit.loader.PactFolder;
import au.com.dius.pact.provider.junit.Provider;
import au.com.dius.pact.provider.junit.State;
import au.com.dius.pact.provider.junit5.HttpsTestTarget;
import au.com.dius.pact.provider.junit5.PactVerificationContext;
import au.com.dius.pact.provider.junit5.PactVerificationInvocationContextProvider;
import org.apache.http.HttpRequest;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.TestTemplate;
import org.junit.jupiter.api.extension.ExtendWith;
import static com.hmhco.cp.config.Constants.*;
@Provider("UPDATE")
@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(BASE_URL, 443, "/update/v1/lastUpdateSummary"));
}
@State("v1/lastUpdateSummary")
public void sampleState() {
getAuthorizationToken("teacher");
}
}
PS:确保这是使用的导入:
import au.com.dius.pact.provider.junit.loader.PactFolder;