我们是否应该将价值匹配作为合同验证的一部分?

Should we include value matching as part of contract validation?

我们正在使用 pact 进行合同测试。对于在两个不同的上下文中使用的 api,会在响应中使用不同的值进行响应(尽管响应的字段和格式相同。)我们是否应该将其作为两种不同的交互来涵盖?如果是,那不就是在测试业务功能吗?

这也将对以下情况产生影响...... 我们正在使用合同测试来验证我们的移动应用程序的向后兼容性。如果 api 发生变化,则只有响应值发生变化。如果更改适用于当前版本的消费者,但不适用于旧版本。这将破坏提供程序与旧版移动应用程序的向后兼容性。如果我们只将响应的结构视为合同测试的一部分,我们将如何捕捉到这一点?

这是一个很好的问题,在所有情况下都没有直接的答案。

我首先要说的是,结构本身并不是契约测试——它更像是模式测试——而且 schemas are not contracts。合同测试在很多情况下确实关心价值。

首先使用以下 operative:

The rule of thumb for working out what to test or not test is - if I don't include this scenario, what bug in the consumer or what misunderstanding about how the provider responds might be missed. If the answer is none, don't include it.

在您的情况下,role 的值具有类似枚举的特定含义。我假设消费者代码寻找这个值,并可能根据它的值有条件地做一些不同的事情。例如,如果它是 UI,它可能会在页面旁边显示不同的选项,或获取其他相关数据。

如果是这种情况,那么您可能希望将其作为合同测试包括在内。如果 UI 除了显示它之外不关心字段的值,那么它 wouldn't be worth 包括在合同测试中

if yes, is it not like testing the business functionality?

嗯,不完全是。合同测试不是 功能测试 ,但与许多类型的测试一样,它们存在重叠。您的目标是确保涵盖预期在消费者和提供者之间发生的各种重要对话。功能测试是一项 separate activity,其主要特点是关注副作用。