|
请使用 spring-cloud-contract 5.0.2 获取最新稳定版本! |
三秒速览
在生产者端
要开始使用 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 | 元素让您能够指定基础测试类。它必须是 configuration 元素的子元素,而该 configuration 元素又需位于 spring-cloud-contract-maven-plugin 元素内部。 |
一旦实现和测试基类到位,测试即可通过,且应用程序和存根工件均已在本地 Maven 仓库中构建并安装。现在您可以合并这些更改,并将应用程序和存根工件发布到在线仓库中。
在消费者端
您可以在集成测试中使用 Spring Cloud Contract Stub Runner 来获取一个正在运行的 WireMock 实例或消息路由,以模拟实际的服务。
为此,请将依赖项添加到 Spring Cloud Contract Stub Runner,如下例所示:
您可以通过以下两种方式之一,将生产者端存根安装到您的Maven仓库中:
-
通过检出生产者端仓库,并添加契约(contracts)并生成存根(stubs),可运行以下命令:
$ 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 的值,以便为您运行协作对象的存根(stubs),如下例所示:
@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 响应或预期由协作服务发出的消息。