Spring Cloud Contract中的合同与功能

时间:2017-04-28 14:59:54

标签: spring-cloud-contract

我了解合同测试用于测试应用程序之间的合同,而不是用作业务功能的检查程序。为积极方案写一份合同,一份为负面合同。

但想象下面的例子:

// contract (#1)

org.springframework.cloud.contract.spec.Contract.make {
  request {
    method 'GET'
    url 'client/1'
  }
  response {
    status 200
    body([
        id: 1
        name: "Barbara"
        address: "Park Avenue 1"
    ])
  }
}


// contract (#2)

org.springframework.cloud.contract.spec.Contract.make {
  request {
    method 'GET'
    url 'client/9999'
  }
  response {
    status 404
    body([])
  }
}


// contract (#3)

org.springframework.cloud.contract.spec.Contract.make {
  request {
    method 'GET'
    url 'client/!^&(^%@'
  }
  response {
    status 400
    body([])
  }
}

我找到客户时的积极情况(#1)。 我可以在url中传递变量,这可能在SCC中吗?我可以在这里使用正则表达式来验证输入吗?

我觉得需要两个否定的情况: - 用户不存在(#2), - 请求无效(#3)

这是合理的,还是我忽略了消费者驱动的合约?你会写这些合同吗?

我也有关于制片人方面的问题。如果上述方法在某种程度上是合理的,那么在生产者方面,我将对合同进行(自动生成)测试,但是如何区分现有客户端和现有客户端?我知道合同关心真实数据是不合理的......但是当用户不存在时,如何测试合同(#2)?

1 个答案:

答案 0 :(得分:1)

这些都是非常好的问题!!我会尝试逐一回答。

1是的,您可以传递变量和正则表达式。如果您有正则表达式和具体值的联系人,则必须使用优先级来定义订单。

2我认为#3我不会把它放在合同中但是用WireMock或其他一些http服务器存根手动处理它。我会模拟不同的异常并确保我能够处理它们。在谈论技术例外。如果生产者应用程序由于商业原因可以发送错误,那么我想我会为它写一个联系人。我认为在这种情况下#2是一个例外,因为URL存在,但没有客户端。

至于生产者方......为客户选择一个名称。例如"不存在"然后返回404.将优先级设置为1.并使用正则表达式创建另一个优先级并将优先级设置为5或sth。