testing - 协议消费者测试是否仅用于生成合同 json 文件?
问题描述
契约消费者测试是否用于生成合同 json 文件?
我正在研究协议并且对消费者测试的目的感到好奇?它测试测试类定义的响应。
在我下面的代码中。我用 200 和简单的正文定义了一个响应,然后通过 mockProvider 调用测试它。似乎没用。任何人都请给我一些指导。
public class PactTest {
@Rule
public PactProviderRuleMk2 mockProvider
= new PactProviderRuleMk2("test-provider", "localhost", 8017, this);
@Pact(consumer = "test-consumer")
public RequestResponsePact createPact(PactDslWithProvider builder){
Map<String, String> headers = new HashMap<>();
return builder
.given("test Get")
.uponReceiving("GET REQUEST")
.path("/pact")
.method("GET")
.willRespondWith()
.status(200)
.headers(headers)
.body("{\"condition\": true, \"name\":\"tom\"}")
.toPact();
}
@Test
@PactVerification
public void givenGet_whenSendRequest_shouldReturn200withProperHeaderAndBody() {
ResponseEntity<String> res = new RestTemplate()
.getForEntity(mockProvider.getUrl()+"/pact", String.class);
assertThat(res.getStatusCode().value()).isEqualTo(200);
}
}
解决方案
简短的回答 - 不。
在测试中独立于您的实际消费者代码调用模拟 API 是毫无价值的(正如您所暗示的那样),因为它是一个自我实现的预言。Pact 旨在测试 Consumer 端的协作服务;调用 Provider 的适配器代码。
通常,此调用将通过诸如数据访问层和其他中间层之类的东西。您的 Pact 测试将使用使用这些的服务,其好处是通过此过程定义合同,保证与消费者需求保持同步,因为它是通过您的代码生成的。
我们今天刚刚更新了文档,也许这会有所帮助。
推荐阅读
- sql - 如何为 Bartender 中的每个记录行选择自定义数量?
- angular - 离开页面Angular时使用sessionStorage将值保留在选择值中
- c++ - Qt 中的 iOS 通知
- powershell - Azure devops - 更新 json 文件 - powershell 脚本
- c++ - 有没有办法在 C++ 中初始化这样的 3D 数组?
- c - 为什么 getpwnam 返回的结构的 pw_passwd 字段不包含我的密码哈希?
- c# - 使用一个脚本获得 3 个不同的值
- c# - 如何禁用特定行并防止在 Xamarin 数据网格中单击?
- reactjs - React Grid 上的弹出图像
- python - Python 使用 pytest_mock 在一个函数中模拟多个查询