我在PACT上可以找到的所有示例均具有从生产者api到消费者api的一对一映射。在我们的案例中,我们所有的消费者api都将调用多个生产者api。
我们正在使用pact Jvm。我们的消费者合同测试针对的是消费者服务。生产者模拟是在具有@Pact属性的独立函数中定义的,合同测试具有@PactTestFor(pactMethod =属性,这里的“ pactmockmethodname”是具有生产者模拟的函数名称。此设置工作正常。现在,我们进入了一个案例消费者api必须调用多个生产者api。我尝试定义多个pact模拟,但由于@PactTestFor属性仅使用一个pactMethod,因此无法将其挂接进行测试。在这种情况下,建议的方法是什么。
答案 0 :(得分:0)
回答上述问题。发现我们可以使用builder添加多个协定模拟。 例子
消费者api调用两个生产者方法/ user / 1和/ user / account / 1,我们可以如下定义pact模拟。
@Pact(consumer = "CONSUMER") fun getUser(builder: PactDslWithProvider): RequestResponsePact { return builder .uponReceiving("get user basic info request") .path("/user/1") ....... // define response status code and body as required .uponReceiving("get user account info request") .path("/user/account/1") ...... // define response status code and body as required .toPact() }
消费者合同测试可以如下所示
@Test @PactTestFor(pactMethod = "getUser") fun `should respond with user info`() { // consumer api call val result = restTemplate.getForEntity("/customers/1",String::class.java) val expected = ... // have expected here assertEquals(HttpStatus.OK, result.statusCode) assertEquals(expected, result.body, false) }