Как установить значения NULL в Stub как clientValue с Spring Cloud Contracts - PullRequest
1 голос
/ 05 ноября 2019

Мы пытаемся установить значения null в коде сайта клиента-производителя.

Пример контракта Groovy:

Contract.make {
        description("Creating user")
        name("Create user")
        request {
            method 'POST'
            url '/api/user'
            body(
                    name: $(consumer(anyNonEmptyString()), producer('John Doe')),
                    address: $(consumer(optional(regex(alphaNumeric()))), producer(null))
            )
            headers {
                contentType(applicationJson())
            }
        }
        response {
            status 201
        }
    }

Следующий контракт приводит к ошибке при подтверждении при попытке анализаGroovy-контракт:

assert testSide ==~ Pattern.compile(stubSide.optionalPattern())
   |        |           |       |        |
   null     false       |       |        ([a-zA-Z0-9]+)?
                        |       ([a-zA-Z0-9]+)?
                        ([a-zA-Z0-9]+)?

Любое предложение установить нулевое значение в сгенерированном классе, чтобы получить такой результат (или просто не добавлять поле address:

@Test
public void create_user() throws Exception {
    // given:
        MockMvcRequestSpecification request = given()
                .header("Content-Type", "application/json")
                .body("{\"name\":\"John Doe\",\"address\": null,");

    // when:
        ResponseOptions response = given().spec(request)
                .post("/api/user");

    // then:
        assertThat(response.statusCode()).isEqualTo(201);
}

1 Ответ

1 голос
/ 06 ноября 2019

В Spring Cloud Contract возникла проблема, когда мы рассматривали необязательное свойство как значение, которое установлено либо пустым, либо непустым, но оно должно быть там. С исправлением https://github.com/spring-cloud/spring-cloud-contract/issues/1257 мы также добавили поддержку значения null.

...