pact - 在合约发布到在线经纪人之前,如何在本地验证 PACT 测试?
问题描述
我有一种情况,我可以以 .json 文件的形式访问合同,但它尚未发布,这可能需要一些时间才能发生。我想开始为它编写验证测试,所以正在考虑将这个文件手动粘贴到协议/文件夹下并连接到它而不是在线代理?我想我以前在某个地方看到过类似的事情。这真的可能吗?如果是这样,我可以得到一个样品吗?非常感谢。
解决方案
在这里回答我自己的问题。可以通过生成或手动粘贴消费者在 target/pacts 文件夹下创建的 .json 文件并添加 @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;
推荐阅读
- android - 我们如何获得 Composable 在屏幕中的位置/大小?
- javascript - 如何存储 URL 参数,以便浏览器在刷新或发送链接到其他浏览器时记住它
- git - 我正在尝试使用 push -u origin main 但出现以下错误
- postgresql - 如何从外部 CLI 连接到 Docker Postgres 容器?
- sql - 在 PL/pgsql 中使用基于标志的不同列构建查询
- php - 查找 301 重定向的来源
- tensorflow-serving - CPU AVX AVX2 的 TensorFlow Serving 编译失败
- python - 用字符串列表中的相应值替换字符串
- firebase - google 登录后无法获取 Google auth 标头(空值检查运算符用于空值)
- django - 如何用芹菜运行爬虫