问题标签 [pact-jvm]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
923 浏览

gradle - 无法在 PACT Broker 中发布“上次验证”状态

对于微服务合同测试,我将 PACT 与 gradle 4.4 一起使用,这是我的 build.gradle:

虽然能够在代理中发布协议文件并能够查看依赖关系图,但在运行 pactVerify 方法后,“上次验证”显示为空白。我看到了一些关于 'pact.verifier.publishResults=true' 的文档,并试图作为 gradle 参数传递,但我收到一条错误消息:

FAILURE:构建失败并出现异常。

  • 出了什么问题:您的项目配置错误,在构建中期望一个“协议”配置,但得到一个值为 '' 的字符串。确保没有覆盖“pact”的属性。

我运行的 gradle 命令是:

请让我知道我错过了什么,不接受 pact.verifier.publishResults

0 投票
2 回答
40 浏览

java - 提供程序中 PactVerify 每次迭代中数据的持久性

当提供者的端点执行数据持久性时,执行合同测试的最佳方法是什么?

例如,客户的注册。我应该考虑回滚管道中的数据吗?

0 投票
1 回答
836 浏览

lambda - 如何使用 lambda Dsl for Pact 为“arrayMinLike”生成相同的匹配规则?

我有一个样本主体如下;

我想验证以下内容: 1. 响应应该是一个至少包含 1 个元素的数组 2. 每个元素应该是:2.1。字符串 2.2。应该是这种格式“DD/MM/YYYY”

它与“旧”风格完美搭配:

这将生成具有匹配规则的协议文件,如下所示。注意$$[*]

但是,当我尝试使用“新”样式,即lambda Dsl for Pact (Java8)时,它不会生成相同的匹配规则;因此不能以相同的方式工作,并且我的提供程序测试总是失败并显示以下错误消息

$ -> 期望一个包含 1 个元素但收到 3 个元素的列表

下面是我的代码生成的代码和匹配规则。注意$[0]and $[1]: 匹配规则

和代码

尝试了另一种方式

我一直在尝试将它们.minArrayLike(1)放在不同的地方,但它们都不起作用。无论如何使用 lambda Dsl for Pact 产生相同的匹配规则吗?

0 投票
1 回答
893 浏览

java - Pact-jvm - 使用正则表达式验证数组内的字符串值

我有这个数组结构:

我是这样验证的:

但我的问题是,有时数组中的元素不是由提供者以相同的顺序返回的,所以,我的问题是:如何验证它的最佳方法是什么?考虑到它总是会返回一个由 4 个元素组成的数组,但字符串值的顺序不一致。我也尝试过这种方式:

但是协议会生成一个合同,例如:

0 投票
2 回答
516 浏览

spring - 在 Pact Contract Provider 测试中找不到 Pageable 的主要或默认构造函数

我设置了以下协议合同提供者测试

运行测试结果:

getStructuresByDocumentId 方法需要一个 Pageable 对象作为其第二个参数。将注释 @SpringBootTest 更改为

不能解决问题。任何想法,如何解决这个问题?

0 投票
0 回答
1447 浏览

pact - 如何在 Pact 提供者验证期间修改 POST 中的请求正文?

是否可以在提供者验证期间修改正文中定义的参数值?

pact wiki ( https://github.com/DiUS/pact-jvm/tree/master/pact-jvm-provider-junit#modifying-the-requests-before-they-are-sent-version-323245 ) 提供了一个修改请求的功能:

org.apache.http.HttpRequest只能修改headers而不是body

这是我的相关协议信息:

在上面的示例中,我想将 修改s3ObjectKey为不同的 UUID。

这个答案(https://stackoverflow.com/a/46377050/3714922)说你可以修改 URL(我认为它指的是path我上面的协议),但我不知道如何修改 URL 或正文。

0 投票
1 回答
2966 浏览

spring-boot - @SpyBean 不适用于 Pact 和 JUnit 5

我正在尝试使用@SpyBean来模拟 a 的方法@Component并且不起作用。@MockBean作品(按照示例)。我已经尝试、阅读和研究了很多方法,但无法使其发挥作用。

这是示例:

(我超级简化了测试功能,所以它更容易阅读,我实际上会这样做doReturn(...).when(...).blah()

我总是收到“不是模拟”错误,因为对象始终是 Spring CGLIB 包装的 bean:

我试过了:

  • @SpringJUnitConfig
  • 有一个单独的@TestConfiguration,但解决了上面相同的 bean
  • Mockito.initAnnotations(this)在一个使用@BeforeEach
  • 还有更多,我尝试了很多我不记得的组合......

有什么我想念的吗?还是我不知道的选项?

0 投票
3 回答
190 浏览

java - 关于使用契约的概念性问题

我是一个团队的一员,该团队正在为我们整个公司“开创”使用协议。在这段旅程中,我们遇到了许多问题,这些问题主要是由于误解了 CDC-Testing 协议的使用。随着时间的推移,其中很多问题都可以解决,但仍有一些主要问题我无法找到任何好的解决方案或示例。由于我认为回答这些问题非常重要,因此我认为尝试直接与您联系可能会对我们有所帮助。

  1. 问题:在实现提供者测试时,我们应该在应用程序的哪个“层”实现我们的测试?
    背景:当我们第一次开始使用协议向我们的应用程序添加 CDC 测试时,我们通过启动包括内存数据库的应用程序上下文进行功能测试,并在该数据库中设置数据。这导致测试难以维护,另外我们实际上是在进行功能测试,而协议并不意味着这样做。在多次考虑如何实现测试的方法之后,我们最终只测试了我们的边界,其中包括其余接口和(最多)输入和输出验证。
  2. 问题:使用多个提供者状态背后的想法是什么?
    背景: Pact 支持在一次交互中使用多个提供者状态。我们尝试了这个功能,但是我们的很多开发人员并不认为在多个提供者状态下有很大的优势。因此,我们使用 pact 进行的许多 cdc 测试都具有冗长而复杂的提供程序状态描述。所以我认为我们没有理解这个功能的基本概念。
  3. 问题:参数化提供者状态背后的想法是什么?
    背景:与之前的背景基本相同。我们尝试了此功能,但我们的许多开发人员决定不使用它。因为拒绝该功能是基于不完全理解该功能,所以我想知道这个功能被认为是用来做什么的。
  4. 问题:我们应该如何处理关于我们的版本控制策略的协议?
    背景:目前,官方协议文档中记录了使用语义版本控制处理应用程序之间的合同。我们使用 SNAPSHOT 版本控制,目前不能选择更改版本控制策略。此外,我们公司中的多个其他团队存在不同的版本控制策略。基本上不可能就一种策略达成一致。当我们谈论在整个公司中使用 cdc 和 pact 时,这意味着什么?这会导致什么问题?正确标记合同(主、功能、开发、生产……)是否可以解决有关版本控制的任何问题?
0 投票
1 回答
677 浏览

java - PACT - 修改标头以包含 oAuth2 令牌

我在提供者端使用 PACT JVM,我需要在发出请求之前将 oAuth2 令牌添加到标头。我已遵循此常见问题解答中的建议

https://docs.pact.io/faq#how-do-i-test-oauth-or-other-security-headers

我创建了以下类:

但是,我不知道如何在发出请求之前拦截请求以修改标头并包含令牌。

0 投票
2 回答
1222 浏览

maven - mvn pact:verify 不执行提供者状态,但 @State 代码从 IDE 执行

当我从 IDE 执行我的提供程序测试时,@State 方法被执行,但 mvn pact:verify 命令不执行提供程序的 @State

提供者测试类:

我的 pom.xml 文件:

我的契约文件:

当我执行 mvn pact:verify -X 命令时,我在控制台中看到:

鉴于 Wprovider 将产生新的东西

[调试] 调用状态更改http://mywebsite.com/myservice/myaction -> HTTP/1.1 200 OK [调试] 状态更改:“ProviderState(name= http://mywebsite.com/myservice/myaction , params={ })" -> 好的(值={})

我缺少一些与 mvn pact:verify 的 @State 相关的设置?