跳到主要内容

三秒速览

DeepSeek V3 中英对照 A Three-second Tour

这段非常简短的教程将引导您使用 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>
  • 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响应或消息的存根版本。