【问题标题】:Spring Cloud Contract - how to test simple string response?Spring Cloud Contract - 如何测试简单的字符串响应?
【发布时间】:2017-08-28 10:19:25
【问题描述】:

我正在使用 Spring Cloud Contract 框架进行 REST 服务集成测试和相关的客户端应用程序合同。它适用于对象 JSON 请求/响应,但有机会检查简单的字符串。特别是,服务哪个响应布尔值(响应正文中的真或假)?

groovy 定义的一部分:

response {
    status 200
    headers {
        header('Content-Type', 'application/json;charset=UTF-8')
    }
    body(
        value(client('true'), server(regex("true|false")))
    )
}

生成测试的相关部分:

    String responseBody = response.getBody().asString();
    null;

这是一个错误,不是吗?还是我应该在 groovy 定义中做得更好?第一行让生成器有机会理解我想要什么,但第二行完全没有了。感谢您的任何提示。

附:我知道对于只有字符串“真实”有效性作为 JSON 响应有不同的看法(有些人这么说,其他人不这么说)请不要解决它,但只有真正的问题 :-)

【问题讨论】:

  • 这不是错误,因为这个 JSON 完全无效。尝试将内容类型更改为 text/plain 之类的其他内容,看看它是否工作正常。如果不是,那么这确实是一个错误
  • "true" 是有效的 JSON。
  • 这就是我在 P.S. 中所说的。有很多意见,但我找不到任何正当理由非地图/非数组值必须是无效的JSON。
  • IMO,生成的 java 代码“null;”无论如何看起来都是一个错误。

标签: spring-cloud-contract


【解决方案1】:

问题在这里得到了解决 https://github.com/spring-cloud/spring-cloud-contract/issues/443 。有了新版本(Dalston.SR5 和 Edgware forward),这将不再是问题。

【讨论】:

    【解决方案2】:

    org.springframework.cloud.contract.spec.Contract.make { 要求 { 方法“获取” urlPath('url')

        body([
                 'json-string'
            ])
        headers {
            header('Content-Type', 'application/json;charset=UTF-8')
        }
    }
    response {
        status 200
        body( "\"true\"" )
    } }
    

    这对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-08
      相关资源
      最近更新 更多