我的场景是,消费者定义了两个交互,interation1与state1,interation2与state2。运行interation1后,JSON响应中会有一个id,该id必须用作interation2的查询参数。在提供者端,有没有办法从interation1的响应中提取该id?顺便说一句,我正在使用协定提供商junit。
您的思维方式不对。
提供程序状态旨在防止这种形式的耦合。交互1应该完全独立于交互2。
来自文件:
依赖于以前测试结果的测试很脆弱,会让你回到集成测试地狱,这是你试图通过使用pacts逃离的糟糕地方。
您必须控制提供程序测试上下文,才能进行Pact测试。
在您的情况下,对于状态2,您可能有以下描述:
a user with ID 1 exists
在测试特定交互之前,Pact将为您提供设置该状态的机会,但这应该针对您的用例进行——例如,您的代码可以使用该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
}
这样,可以在根本不知道交互1存在的情况下执行交互2。