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

Spring云契约YAML头匹配

邹驰
2023-03-14

使用POST方法创建新资源时,将新资源的位置添加到响应中,作为位置标头。

如何创建一个spring云契约YML来验证响应是否包含Location头,并将有效的URI作为其值?

我试过下面的YAML,但它不工作。

request:
  method: POST
  url: /customers/v1
  body:
    firstName: First Name
    lastName: Last Name
    dateOfBirth: "1990-12-12"
    active: false
  headers:
    Content-Type: application/json
response:
  status: 201
  matchers:
    headers:
      - key: Location
        regex: "http://localhost/customers/v1/*"

生成测试代码

@Test
public void validate_create_customer_successfully() throws Exception {
    // given:
        MockMvcRequestSpecification request = given()
                .header("Content-Type", "application/json")
                .body("{\"firstName\":\"First Name\",\"lastName\":\"Last Name\",\"dateOfBirth\":\"1990-12-12\",\"active\":false}");

    // when:
        ResponseOptions response = given().spec(request)
                    .post("/customers/v1");

    // then:
        assertThat(response.statusCode()).isEqualTo(201);
}

生成的代码不包含任何头验证。

共有2个答案

安泰平
2023-03-14

低于yaml定义的作品

response:
  status: 201
  headers:
      Location: "http://localhost/customers/v1/"
  matchers:
    headers:
      - key: Location
        regex: "http://localhost/customers/v1/.*"

生成测试代码

// then:
    assertThat(response.statusCode()).isEqualTo(201);
    assertThat(response.header("Location")).matches("http://localhost/customers/v1/.*");

这和预期的一样。我不知道为什么。有人能解释一下吗?

扶绍辉
2023-03-14

我还没有测试过,但如果你尝试一下会发生什么:

response:
  status: 201
  matchers:
    headers:
      - key: Location
        type: by_regex
        predefined: url

这是你的身体匹配者使用的,我不确定它是否适用于头部。

正如你所知。我相信匹配器部分只是为了响应的测试端(验证生产者发出的响应)。如果你也想为你的消费者提供这个头作为存根响应,你必须在匹配器部分之外添加一个固定值。

 类似资料:
  • 由于我是一个新手,并不知道如何匹配这样的东西,我希望有人能帮助我。提前道谢。 编辑1: 我使用了一个节点匹配器,它是我的一个同事创建的,如下所示: 现在我有了一个非常酷的PactDslWithProvider,如下所示: 方法“minmaxType”将一个MinMaxTypeMatcher添加到带有节点路径的body-category中。的实际行为:它匹配的最内部节点的type、min和max。例

  • 我已经在一个Spring Boot项目中创建了一个Spring云契约存根()。希望调用此存根的客户机不是Spring项目,也不可能是Spring项目。如果我在客户端中运行以下命令: 然后我得到一个错误 显然,我没有,因为这不是一个Spring Boot项目。 这里有什么变通办法?

  • 在自由软件项目中的契约需要小心处理。理想状况下,你希望一个承包者的工作被社区接受并打包进入公共发布版本。在理论上,谁是承包者并不重要,只要他的作品足够好并满足项目的指导方针。理论和实践一般也是一致的:一个通过贡献好的补丁展示自己的完全陌生人通常能将代码置入软件当中。问题是,一个完全的陌生人很难为非琐碎的改进或新的特性贡献好的补丁;一个人必须首先和项目的其他人进行讨论。讨论的时间不能精确预测。如果承

  • 契约就是指用去中心化的比特币系统来执行金融协议。比特币的契约可以让交易最大程度地摆脱对外部机构的依赖,例如审判系统等,这样在金融交易方面就大大减少了受未知实体影响的风险。 以下的一些部分会详细说明现有的几种比特币契约。因为契约并不仅局限于交易,更是直接和现实的人相关的协议,所以他们也有既定的框架,这些框架将会在后面的内容中有详细的解读说明。 除了以下介绍的几种契约方式外,还有人提出其他的方式。有一

  • 我有以下spring cloud合同: 为了从服务器生成动态响应,我在响应处调用get响应。例如,原因可能是来自数据库的自动生成的id。从get响应ForFindTeamRletByFilters()生成的字符串是一个有效的JSON,不幸的是,它被忽略,并且在测试运行时返回始终为true。 当我用如下静态响应替换execute方法时,我注意到了这一点: 在这种情况下,响应被正确验证,如果不匹配,则

  • 我正在查看spring docs和spring github,我可以看到一些通过json消息和kafka主题进行通信的异步kafka消息传递(生产者和消费者)的非常基本的示例,但似乎没有更多的示例用于更像生产的设置,其中消息不是json而是avro消息,而Schema Registry(例如Confluent)也在图片中。我对此感到非常惊讶,因为当基于事件的微服务通过生成/使用avro消息进行通信