0

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

但是想象一下下面的例子:

// 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)?

4

1 回答 1

1

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

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

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

至于制作方……为客户取一个名字。例如“不存在”,然后返回 404。将优先级设置为 1。并使用正则表达式创建另一个,并将优先级设置为 5 或某事。

于 2017-04-28T16:08:02.080 回答