此版本仍在开发中,目前尚不被视为稳定版本。如需最新稳定版本,请使用 spring-cloud-contract 5.0.2spring-doc.cadn.net.cn

三秒速览

本简短的指南介绍了如何使用 Spring Cloud Contract。它包含以下主题:spring-doc.cadn.net.cn

您可以在此处找到一个稍长的指南这里spring-doc.cadn.net.cn

以下UML图显示了Spring Cloud Contract中各部分之间的关系:spring-doc.cadn.net.cn

getting-started-three-second

在生产者端

要开始使用 Spring Cloud Contract,您可以将使用 Groovy DSL 或 YAML 编写的 REST 或消息契约文件添加到 contracts 目录中,该目录由 contractsDslDir 属性指定。默认情况下,其值为 $rootDir/src/test/resources/contractsspring-doc.cadn.net.cn

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

以下列表显示了如何添加插件,该插件应放置在文件的 build/plugins 部分中:spring-doc.cadn.net.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 install 会自动生成测试用例,以验证应用程序对新增契约的合规性。默认情况下,测试用例将生成于 org.springframework.cloud.contract.verifier.tests. 目录下。spring-doc.cadn.net.cn

由于尚未实现由契约所描述的功能,测试失败。spring-doc.cadn.net.cn

要使它们通过,您必须添加正确的 HTTP 请求或消息处理实现。此外,您还必须将一个基础测试类添加到项目中,以便自动生成的测试使用该类。所有自动生成的测试都继承自该类,它应包含运行这些测试所需的所有设置信息(例如 RestAssuredMockMvc 控制器设置或消息测试设置)。spring-doc.cadn.net.cn

以下示例来自 pom.xml,展示了如何指定基础测试类:spring-doc.cadn.net.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 元素让您能够指定基础测试类。它必须是 configuration 元素的子元素,而该 configuration 元素又需位于 spring-cloud-contract-maven-plugin 元素内部。

一旦实现和测试基类到位,测试即可通过,且应用程序和存根工件均已在本地 Maven 仓库中构建并安装。现在您可以合并这些更改,并将应用程序和存根工件发布到在线仓库中。spring-doc.cadn.net.cn

在消费者端

您可以在集成测试中使用 Spring Cloud Contract Stub Runner 来获取一个正在运行的 WireMock 实例或消息路由,以模拟实际的服务。spring-doc.cadn.net.cn

为此,请将依赖项添加到 Spring Cloud Contract Stub Runner,如下例所示:spring-doc.cadn.net.cn

您可以通过以下两种方式之一,将生产者端存根安装到您的Maven仓库中:spring-doc.cadn.net.cn

  • 通过检出生产者端仓库,并添加契约(contracts)并生成存根(stubs),可运行以下命令:spring-doc.cadn.net.cn

    $ cd local-http-server-repo
    $ ./mvnw clean install -DskipTests
测试被跳过,因为生产者端契约实现尚未到位,因此自动生成的契约测试失败。

现在,您可以使用 @AutoConfigureStubRunner 注解您的测试类。在注解中,为 Spring Cloud Contract Stub Runner 提供 group-idartifact-id 的值,以便为您运行协作对象的存根(stubs),如下例所示:spring-doc.cadn.net.cn

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

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