当消费者api调用多个提供者api时,pact是否支持消费者合约测试

时间:2019-09-04 05:31:24

标签: pact

我在PACT上可以找到的所有示例均具有从生产者api到消费者api的一对一映射。在我们的案例中,我们所有的消费者api都将调用多个生产者api。

我们正在使用pact Jvm。我们的消费者合同测试针对的是消费者服务。生产者模拟是在具有@Pact属性的独立函数中定义的,合同测试具有@PactTestFor(pactMethod =属性,这里的“ pactmockmethodname”是具有生产者模拟的函数名称。此设置工作正常。现在,我们进入了一个案例消费者api必须调用多个生产者api。我尝试定义多个pact模拟,但由于@PactTestFor属性仅使用一个pactMethod,因此无法将其挂接进行测试。在这种情况下,建议的方法是什么。

1 个答案:

答案 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)
    }