此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 spring-cloud-contract 4.1.5spring-doc.cn

三秒导览

这个非常简短的教程将介绍如何使用 Spring Cloud Contract。它由 以下主题:spring-doc.cn

你可以在这里找到一个稍长的旅行。spring-doc.cn

下面的 UML 图显示了 Spring Cloud Contract 中各部分的关系:spring-doc.cn

入门 3 秒

在生产者端

要开始使用 Spring Cloud Contract,您可以使用 REST 或消息传递 Contract 添加文件 以 Groovy DSL 或 YAML 表示到 contracts 目录,该目录由属性设置。默认情况下,它是 。contractsDslDir$rootDir/src/test/resources/contractsspring-doc.cn

然后,您可以将 Spring Cloud Contract Verifier 依赖项和插件添加到您的构建文件中,例如 以下示例显示:spring-doc.cn

下面的清单显示了如何添加插件,它应该放在 build/plugins 中 部分:spring-doc.cn

<plugin>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-contract-maven-plugin</artifactId>
	<version>${spring-cloud-contract.version}</version>
	<extensions>true</extensions>
</plugin>

运行会自动生成验证应用程序的测试 遵守添加的合同。默认情况下,测试在 下生成。./mvnw clean installorg.springframework.cloud.contract.verifier.tests.spring-doc.cn

由于合同中描述的功能尚未实现 存在,则测试失败。spring-doc.cn

要使它们通过,您必须添加处理 HTTP 的正确实现 请求或消息。此外,您必须为自动生成的 tests 添加到项目中。这个类由所有自动生成的测试扩展,并且它 应包含运行它们所需的所有设置信息(例如,控制器设置或消息传递测试设置)。RestAssuredMockMvcspring-doc.cn

以下示例 from 显示了如何指定 base test 类:pom.xmlspring-doc.cn

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-contract-maven-plugin</artifactId>
                <version>2.1.2.RELEASE</version>
                <extensions>true</extensions>
                <configuration>
                    <baseClassForTests>com.example.contractTest.BaseTestClass</baseClassForTests> (1)
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
1 该元素允许您指定基本测试类。它必须是 child 的元素中。baseClassForTestsconfigurationspring-cloud-contract-maven-plugin

一旦实现和测试基类就位,测试就会通过,并且 应用程序和存根工件在本地 Maven 存储库中构建和安装。 现在,您可以合并更改,并且可以发布应用程序和存根工件 在联机存储库中。spring-doc.cn

在消费者方面

您可以在集成测试中使用来运行 模拟实际服务的 WireMock 实例或消息传送路由。Spring Cloud Contract Stub Runnerspring-doc.cn

为此,请将依赖项添加到 ,作为 以下示例显示:Spring Cloud Contract Stub Runnerspring-doc.cn

您可以通过以下两种方式将生产者端存根安装在 Maven 存储库中 方式:spring-doc.cn

  • 通过签出 Producer 端存储库并添加 Contract 并生成存根 通过运行以下命令:spring-doc.cn

    $ cd local-http-server-repo
    $ ./mvnw clean install -DskipTests
跳过测试是因为生产者端合约实现不是 ,因此自动生成的 Contract 测试会失败。

现在,您可以使用 .在注释中, 提供 和 值 to 为您运行 Collaborators' Stubs,如下例所示:@AutoConfigureStubRunnergroup-idartifact-idSpring Cloud Contract Stub Runnerspring-doc.cn

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment=WebEnvironment.NONE)
@AutoConfigureStubRunner(ids = {"com.example:http-server-dsl:+:stubs:6565"},
		stubsMode = StubRunnerProperties.StubsMode.LOCAL)
public class LoanApplicationServiceTests {
	. . .
}
从在线存储库下载存根时和离线工作时使用。REMOTEstubsModeLOCAL

现在,在集成测试中,您可以接收 HTTP 响应的存根版本或 预期由 Collaborator 服务发出的消息。spring-doc.cn