三秒钟速览

这篇简短的教程介绍了 Spring Cloud Contract 的使用。它包含以下主题:

你可以在这里找到一个稍长一点的教程。

下面的 UML 图显示了 Spring Cloud Contract 中各部分的关系:

getting-started-three-second

在生产者端

要开始使用 Spring Cloud Contract,你可以将用 Groovy DSL 或 YAML 表示的 REST 或消息契约文件添加到 `contracts` 目录中,该目录由 `contractsDslDir` 属性设置。默认情况下,它是 `$rootDir/src/test/resources/contracts`。

然后,你可以将 Spring Cloud Contract Verifier 依赖项和插件添加到你的构建文件中,如下面的示例所示:

以下清单显示了如何添加插件,它应该放在文件的 build/plugins 部分:

<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.` 下生成。

由于契约所描述的功能尚未实现,因此测试会失败。

为了使它们通过,你必须添加正确的 HTTP 请求处理或消息处理实现。此外,你必须为自动生成的测试向项目添加一个基础测试类。所有自动生成的测试都将扩展这个类,并且它应该包含运行它们所需的所有设置信息(例如 `RestAssuredMockMvc` 控制器设置或消息测试设置)。

下面的示例来自 `pom.xml`,展示了如何指定基础测试类:

<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 `baseClassForTests` 元素允许你指定你的基础测试类。它必须是 `spring-cloud-contract-maven-plugin` 中 `configuration` 元素的子元素。

一旦实现和测试基础类就绪,测试就会通过,并且应用程序和存根工件都会构建并安装到本地 Maven 仓库中。你现在可以合并更改,并且可以将应用程序和存根工件发布到在线仓库中。

在消费者端

你可以在集成测试中使用 `Spring Cloud Contract Stub Runner` 来获取一个运行中的 WireMock 实例或消息路由,以模拟实际服务。

为此,请添加对 `Spring Cloud Contract Stub Runner` 的依赖,如下面的示例所示:

你可以通过以下两种方式将生产者端存根安装到你的 Maven 仓库中:

  • 通过检出生产者端仓库并添加契约,然后运行以下命令生成存根:

    $ cd local-http-server-repo
    $ ./mvnw clean install -DskipTests
测试被跳过,因为生产者端契约实现尚未就绪,所以自动生成的契约测试会失败。
  • 通过从远程仓库获取已有的生产者服务存根。为此,将存根工件 ID 和工件仓库 URL 作为 `Spring Cloud Contract Stub Runner` 属性传递,如下面的示例所示:

现在你可以使用 `@AutoConfigureStubRunner` 注解你的测试类。在注解中,为 `Spring Cloud Contract Stub Runner` 提供 `group-id` 和 `artifact-id` 值,以便它为你运行协作者的存根,如下面的示例所示:

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

现在,在你的集成测试中,你可以接收协作者服务预期发出的 HTTP 响应或消息的存根版本。

© . This site is unofficial and not affiliated with VMware.