标签: spring-cloud-contract

Spring Cloud 合同:生成的测试没有配置 MockMVC 并且编译失败

我遇到了“您尚未配置 MockMVC 实例”的问题。“mvn全新安装”时的异常。

跑步

org.springframework.cloud.contract.verifier.tests.ContractVerifierTest 测试运行:1,失败:0,错误:1,跳过:0,时间:0.185 秒 <<< 失败!- 在 org.springframework.cloud.contract.verifier.tests.ContractVerifierTest validate_shouldGetAmenities(org.springframework.cloud.contract.verifier.tests.ContractVerifierTest) 已用时间:0.184 秒 <<< 错误!java.lang.IllegalStateException:您尚未配置 MockMVC 实例。你可以静态地做到这一点

或使用 DSL:

给定()。模拟Mvc(..)。..

问题是,抛出此异常的测试是基于合约生成的测试。

这是合同。

package contracts

org.springframework.cloud.contract.spec.Contract.make {
    request {
        method 'GET'
        url '/abc/def/serviceA?catalog=x'
        body("")
    }
    response {
        status 200
        body(""
        )
        headers {
            contentType(applicationJsonUtf8())
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是生成的测试。

package org.springframework.cloud.contract.verifier.tests;

public class ContractVerifierTest {

@Test
public void validate_shouldGetMyStuff() throws Exception {
        // given:
        MockMvcRequestSpecification request = given()
                .body("\"\"");

        // when:
            ResponseOptions response = given().spec(request)
                .get("/abc/def/serviceA?catalog=x");

        // then:
            assertThat(response.statusCode()).isEqualTo(200);
            assertThat(response.header("Content-Type")).matches("application/json;charset=UTF-8.*");
        // …
Run Code Online (Sandbox Code Playgroud)

spring-cloud spring-cloud-contract

7
推荐指数
1
解决办法
5069
查看次数

如何指定可选的查询参数

我在合同中定义了查询参数。我需要这个参数是可选的:

method 'GET'
    url($(regex(urlRegex))) {
        queryParameters {
            parameter 'fitler': $(stub(regex(filterRegex)))
        }
}
Run Code Online (Sandbox Code Playgroud)

我希望这个合同适用于带有过滤器的 URL/my/sample/url?fitler=some-filter-expression和不带过滤器参数的URL /my/sample/url

我怎样才能做到这一点?这甚至可能吗?

java wiremock spring-cloud-contract

7
推荐指数
1
解决办法
1636
查看次数

什么是发布火车 Bom?

我正在处理 Spring cloud 合同文档,我看到了Spring cloud 文档依赖的评论,想知道这到底是什么 <!-- If you're adding this dependency explicitly you have to add it *BEFORE* the Release Train BOM-->

dependencies pom.xml spring-cloud spring-cloud-contract

7
推荐指数
2
解决办法
3487
查看次数

Spring Cloud Contract - 是消费者驱动的吗?

我刚开始为我们的微服务设置使用消费者驱动的合同,因为它们主要是 Spring Boot 应用程序,所以自然选择 Spring Cloud Contract。但随之而来的是混乱。在 docs 中的所有示例中,合同都是在生产者端定义的,消费者从 maven 仓库中检索它们。如果生产者定义它们,它是如何由消费者驱动的?

我的理解是,概念上消费者将它们定义为生产者对其使用的部分 API 的期望。除了前面的问题,Spring Cloud Contract 是否可以在消费者端定义一个合约并在生产者端进行验证?

java spring-cloud-contract spring-boot-test

7
推荐指数
1
解决办法
526
查看次数

为可能的空数组定义合同?

我正在尝试使用 Spring-Cloud-Contract 定义 CDC 合同,如下所示:

org.springframework.cloud.contract.spec.Contract.make {
    request {
        method 'GET'
        url $(client(~/\/categories\?publication=[a-zA-Z-_]+?/), server('/categories?publication=DMO'))
    }
    response {
        status 200
        headers {
            header('Content-Type', 'application/json;charset=UTF-8')
        }
        body """\
            [{
                "code": "${value(client('DagKrant'), server(~/[a-zA-Z0-9_-]*/))}",
                "name": "${value(client('De Morgen Krant'), server(~/[a-zA-Z0-9_\- ]*/))}",
                "sections" : []
            },
            {
                "code": "${value(client('WeekendKrant'), server(~/[a-zA-Z0-9_-]*/))}",
                "name": "${value(client('De Morgen Weekend'), server(~/[a-zA-Z0-9_\- ]*/))}",
                "sections" : [
                    {
                    "id" : "${value(client('a984e824'), server(~/[0-9a-f]{8}/))}",
                    "name" : "${value(client('Binnenland'), server(~/[a-zA-Z0-9_\- ]*/))}"
                    }
                ]
            }]
        """
    }
}
Run Code Online (Sandbox Code Playgroud)

在生成的测试中,这会导致以下断言:

DocumentContext parsedJson = JsonPath.parse(response.getBody().asString());
assertThatJson(parsedJson).array().contains("code").matches("[a-zA-Z0-9_-]*");
assertThatJson(parsedJson).array().array("sections").contains("id").matches("([0-9a-f]{8})?");
assertThatJson(parsedJson).array().array("sections").contains("name").matches("[a-zA-Z0-9_\\- ]*");
assertThatJson(parsedJson).array().contains("name").matches("[a-zA-Z0-9_\\- ]*"); …
Run Code Online (Sandbox Code Playgroud)

spring-cloud spring-cloud-contract

6
推荐指数
1
解决办法
4613
查看次数

在 Spring Cloud Contract Groovy 合约中使用复杂的 JSON

我一直在思考如何正确实现 Spring Cloud Contract Verifier,但是我试图通过合同强制执行的 JSON 很复杂,而且我不确定如何在 Groovy 表示中处理它。JSON 主体有时包含键的子对象,有时包含对象数组。

    response {
    status(200)
    headers { contentType applicationJson() }
    body(
        "attrbte1": 777310402,    
        "attrbte2": 100,
        "attrbte3": "CAPSULE",
        "attrbte4": "01655",
        "attrbte5": "281604",
        "attrbte6": "28160420",
        "genericCodeNo": 16353,
        "stc": {
            "stcAttrbt1": 10000001600,
            "stcAttrbt2": "8875",
            "stcAttrbt3: "2008-08-04T00:00:00.000+0000",
            "stcAttrbt4": null
        },
        "gtc": {
            "gtcAttbt1": 10000000028,
            "gtcAttbt2": "0N",
            "gtcAttbt3": "2008-08-04T00:00:00.000+0000"
        },
        "etcs": [
            {
                "etcAttbt1": 530,
                "etcAttbt2": null,
                "etcAttbt3": null
            }
        ],
        "icds": [
            {
                "icdCode": "F31.3",
                "icdCode2": "F45.232"
            },
            {
                "icdCode": "F40.01",
                "icdCode2": "F44.2341"
            }
        ]
        ) …
Run Code Online (Sandbox Code Playgroud)

groovy json spring-cloud-contract

6
推荐指数
1
解决办法
909
查看次数

Wiremock 错误:请求不匹配,因为没有注册存根

@ClassRule
    public static WireMockRule wireMockRule = new WireMockRule(9898);

    @Test
    public void createXmlFile() {
        stubFor(get(urlPathEqualTo("/data/racing/"))
                .willReturn(aResponse()
                        .withBody(loadJSONFile("unibet-demo-input.json"))));

    }
Run Code Online (Sandbox Code Playgroud)

我不知道这里出了什么问题!

2019-01-16 15:54:05.810 [qtp1929284175-20] INFO  ROOT:2341 - RequestHandlerClass from context returned com.github.tomakehurst.wiremock.http.StubRequestHandler. Normalized mapped under returned 'null'
2019-01-16 15:54:05.822 [qtp1929284175-15] INFO  __admin:2341 - RequestHandlerClass from context returned com.github.tomakehurst.wiremock.http.AdminRequestHandler. Normalized mapped under returned 'null'
2019-01-16 15:54:05.925 [qtp1929284175-20] ERROR WireMock:40 - Request was not matched as there were no stubs registered:
{
      "url" : "/data/racing/",
      "absoluteUrl" : "http://localhost:9898/data/racing/",
      "method" : "GET",
      "clientIp" : "127.0.0.1",
      "headers" …
Run Code Online (Sandbox Code Playgroud)

wiremock spring-cloud spring-cloud-contract

6
推荐指数
1
解决办法
1万
查看次数

Webflux 响应式 API 的 Spring Cloud 合同

我正在尝试将 Spring Cloud Contract 应用于使用 Spring Webflux 构建的 Reactive API。基本上能够以以下样式发送 Flux 并从 API 接收响应 Flux:

@RequestMapping("/endlessecho")
public Flux<String> endlessEcho(Flux<String> input) {
    return input;
}
Run Code Online (Sandbox Code Playgroud)

但是,我无法在网上或文档中找到有关是否可以使用 Spring Cloud Contract 执行此操作的信息。

甚至可以为此编写合同吗?它能够提供 wiremock 并生成适当的 JUnit 测试吗?

spring-cloud-contract spring-webflux

5
推荐指数
1
解决办法
1232
查看次数

PACT与Spring Cloud合约测试

我试图了解PACT和Spring Cloud Contract之间更好的工具,以实施消费者驱动程序合同测试。我没有找到任何明显的例子来寻找利弊。

我想实现CDCT,并且在我的项目中不使用Spring。根据我的理解,我认为PACT很好。

欢迎任何信息或建议。谢谢。

spring-cloud-contract pact

5
推荐指数
1
解决办法
2858
查看次数

WireMock 使用错误的 __files 目录进行多目录映射配置

我正在使用 Spring Bootspring-cloud-contract-wiremockcom.github.tomakehurst.wiremock依赖项。我的线模定义存储在 json 文件中。像那样:

directoryA/mappings/detail-mapping-123.json

{
  "request" : {
    "urlPath" : "/detail/123",
    "method" : "GET"
  },
  "response" : {
    "status" : 200,
    "bodyFileName" : "detail.json",
    "headers" : {
      "Content-Type" : "application/json;charset=UTF-8"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

directoryA/__files/detail.json

{
  "id": "123",
  "name": "name-123"
}
Run Code Online (Sandbox Code Playgroud)

directoryB/mappings/search-mapping-123.json

{
  "request" : {
    "urlPath" : "/service/usa/search",
    "queryParameters" : {
      "query": {
        "equalTo": "123"
      }
    },
    "method" : "GET"
  },
  "response" : {
    "status" : 200,
    "bodyFileName" : "search-123.json",
    "headers" …
Run Code Online (Sandbox Code Playgroud)

java junit wiremock spring-cloud spring-cloud-contract

5
推荐指数
1
解决办法
3426
查看次数