微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

契约提供者验证失败并显示:对于输入字符串:“ \ null”

如何解决契约提供者验证失败并显示:对于输入字符串:“ \ null”

我正在尝试在提供者端进行验证,但出现错误-

验证DataConsumer和DataProvider之间的协定 [使用文件pact / DataConsumer-DataProvider.json] 给定一些状态 对json数据的请求 请求失败-输入字符串:“ \ null”

不确定我在这里想念什么。

我的Pojo-

@EqualsAndHashCode
@requiredArgsConstructor
@Builder(toBuilder = true)
@JsonDeserialize(builder = DataModel.DataModelBuilder.class)
public class DataModel {

    @JsonProperty("name")
    private final String name;
    @JsonProperty("price")
    private final double price;
}

条约-

{
  "provider": {
    "name": "DataProvider"
  },"consumer": {
    "name": "DataConsumer"
  },"interactions": [
    {
      "description": "a request for json data","request": {
        "method": "GET","path": "/get/ice/2.0"
      },"response": {
        "status": 200,"headers": {
          "Content-Type": "application/json; charset\u003dUTF-8"
        },"body": {
          "price": 10,"name": "some name"
        },"matchingRules": {
          "header": {
            "Content-Type": {
              "matchers": [
                {
                  "match": "regex","regex": "application/json(;\\s?charset\u003d[\\w\\-]+)?"
                }
              ],"combine": "AND"
            }
          }
        },"generators": {
          "body": {
            "$.name": {
              "type": "ProviderState","expression": "\\${name}","dataType": "STRING"
            },"$.price": {
              "type": "ProviderState","expression": "\\${price}","dataType": "FLOAT"
            }
          }
        }
      },"providerStates": [
        {
          "name": "some state"
        }
      ]
    }
  ],"Metadata": {
    "pactSpecification": {
      "version": "3.0.0"
    },"pact-jvm": {
      "version": "3.6.15"
    }
  }
}

测试-


@ExtendWith(SpringExtension.class)
@SpringBoottest(webEnvironment = SpringBoottest.WebEnvironment.RANDOM_PORT)
@Provider("DataProvider")
@PactFolder(value = "pact")
public class ContractVerificationTest {

    @TestTemplate
    @ExtendWith(PactVerificationspringProvider.class)
    void pactVerificationTestTemplate(PactVerificationContext context) {
        context.verifyInteraction();
    }

    @State("some state")
    void testPact() {
    }
}

代码-

https://github.com/nrworld4/pact-consumer-demo

https://github.com/nrworld4/pact-demo-provider

解决方法

您不会在提供者测试中从提供者状态注释中返回值(名称,价格)(当前无所作为),因此当Pact尝试在请求中动态替换值时,它们为空。

您实际上是否真的需要提供商首先生成它们?

请参阅 https://pactflow.io/blog/injecting-values-from-provider-states/中提供了有关如何使用和修复的详细示例。

更新 可能是您要对参数进行两次转义吗?

在示例中:

.queryParameterFromProviderState("accountNumber","\${accountNumber}","100")

在您的code中:

.valueFromProviderState("price","\\${price}",10.0)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。