如何在协议提供者验证时解析响应

问题描述

我的场景是消费者定义了两个交互,interation1 与 state1,interation2 与 state2。运行interation1后,JSON响应中会有一个id,这个id必须作为interation2的查询参数。在提供者方面,有没有办法从 interation1 的响应中提取该 ID?顺便说一下,我正在使用契约提供者 junit。

解决方法

你以错误的方式思考问题。

Provider states 旨在防止这种形式的耦合。交互 1 应该完全独立于交互 2。

来自documentation

依赖于先前测试结果的测试是脆弱的,并且会让你回到集成测试地狱,这是你试图通过使用协议来逃避的讨厌的地方。

您必须能够控制提供程序测试上下文才能进行 Pact 测试。

在您的情况下,对于状态 2,您可能有以下描述:

a user with ID 1 exists

在测试该特定交互之前,Pact 将 provide you 有机会设置该状态,但是这应该针对您的用例进行 - 例如您的代码可以使用该 ID 在数据库(或内存中的)中创建资源。

@State("a user with ID 1 exists") // Must match the state description in the pact file
public void setupUser1() {
  // Do what you need to for that user to exist 
}

这样,交互 2 可能会在根本不知道交互 1 存在的情况下执行。