当前位置: 首页 > 知识库问答 >
问题:

Pact JVM更新向后兼容性

闾丘山
2023-03-14
{
    "consumer": {
        "name": "consumer-amqp"
    },
    "provider": {
        "name": "prodvider-amqp"
    },
    "messages": [
        {
            "description": "amqp contract",
            "contents": {
                "body": {
                    "guidProperty": "795ecfd5-a3a5-430f-a0cd-1569df61bff6"
                }
            },
            "matchingRules": {
                "$.body.body.guidProperty": {
                    "regex": "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}"
                }
            }
        }
    ],
    "metadata": {
        "pact-specification": {
            "version": "3.0.0"
        },
        "pact-jvm": {
            "version": "3.2.13"
        }
    }
}
{
  "consumer": {
    "name": "consumer-amqp"
  },
  "provider": {
    "name": "prodiver-amqp"
  },
  "messages": [
    {
      "description": "contract",
      "contents": {
        "body": {
          "guidProperty": "e2490de5-5bd3-43d5-b7c4-526e33f71304"
        }
      },
      "matchingRules": {
        "body": {
          "$.guidProperty": {
            "matchers": [
              {
                "match": "regex",
                "regex": "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}"
              }
            ],
            "combine": "AND"
          }
        }
      }
    }
  ],
  "metadata": {
    "pact-specification": {
      "version": "3.0.0"
    },
    "pact-jvm": {
      "version": "3.5.12"
    }
  }
}
body
^
10:21:24.526 [main] DEBUG au.com.dius.pact.matchers.JsonBodyMatcher - compareValues: No matcher defined for path List($, body, body, guidProperty), using equality
10:21:24.527 [main] WARN au.com.dius.pact.matchers.Matchers$ - Path expression body is invalid, ignoring: [1.1] failure: `$' expected but `b' found

java.lang.AssertionError: 

comparison

{$.body.body.guidProperty=Expected 'e2490de5-5bd3-43d5-b7c4-526e33f71304' but received 'aff876f5-5014-937c-6855-c099f9857437'

查看v3规范,新消息似乎是有效的,难道旧的提供程序库(v3.2.13)不支持它吗?我查看了代码,发现了这个commit,在我看来,这似乎是引入更改的地方。

从我的测试来看,新的提供程序库(3.5.12)可以处理新旧格式,但如果类路径中同时存在新的提供程序库和旧的使用者库,http契约测试将失败,并出现运行时错误。

问题:

共有1个答案

洪旻
2023-03-14

正如J_A_X所指出的那样,您引用的commit似乎修复了一个错误,即本应是版本3的pacts不完全符合版本3(它们使用了旧的匹配器格式)

1)是否有一种方法迫使新的消费者以旧的方式创建协议,并且这种形式是否符合规范?

是的是的。您应该可以通过将系统属性pact.provider.version设置为2来修复此问题-那么新旧版本都将能够读取生成的协议。

 类似资料:
  • ngrok承诺有关其接口的兼容性和稳定性,以便您可以自信地构建集成顶部,知道在升级到较新版本时期望的更改。 兼容性承诺 Point Release (2.0.0 -> 2.0.1) - ngrok承诺在点发布之间没有突破性的变化 Minor Version Change (2.0 -> 2.1) - ngrok可能会进行小的更改,打破兼容性的次要版本更改。 ngrok承诺,任何破坏性更改将由一个版

  • 确保您可以轻松顺利地升级您的应用程序,这对我们是很重要的。这就是为什么我们只在主 要版本里程碑才会打破兼容性。你可能熟悉 语义版本控制 ,这 就是我们在所有的 CakePHP 项目中使用的通用准则。总之,语义版本控制意味着只有主要版 本(比如2.0,3.0,4.0)可以打破向后兼容性。次要版本(比如2.1,3.1,3.2)可能会引入新 的功能,但不能破坏兼容性。错误修复版本(比如2.1.2,3.0

  • 如果proto的枚举名发生更改,它是否向后兼容? 例如,我最初有这个: 我修改枚举定义为: ID_1的旧proto消息是否与从包含ID_3的消息编译的新解析器兼容?

  • 我正在我的项目中尝试Java8,我被困在与我的构建过程相关的错误中。 我正在使用ANT脚本,在某个时刻,我正在使用一些javascript(嵌入到ANT中)来执行一些特定于构建的操作。导致错误的脚本部分如下所示: 该项目使用Java 7或Java 6构建得很好,但在使用Java 8时,它会给我带来一些错误。这些错误与JS引擎的升级有关。 特别是我得到了以下例外: javax。剧本ScriptExc

  • 我正在迁移到Spring Boot2.0,我的Prometheus度量有问题。 我知道千分尺是一种新的操作方法,它不像普罗米修斯的立体式那么简单,但还可以。 我的问题是,如果我现在不想更改我的度量,我就不能升级到Spring Boot2.0。我说的对吗? 我尝试了以下操作: 第1号审判 保持我的实现“原样” 将新的依赖项添加到我的应用程序(执行器已在其中) 更改中的内容以访问endpoint =>

  • 我刚刚将我们的Nexus存储库从OSS 2.14.5-02升级到OSS 3.6.2-01。我将遗留url设置为true(如http://books.sonatype.com/nexus-book/3.1/reference/install.html#config-legacy-url中所述),但是REST API似乎不向后兼容。 例如,以下REST API在我的旧Nexus服务器上工作(它下载ja