三秒游
在生产者方面
要开始使用 Spring Cloud Contract,您可以添加带有 REST 或消息传递契约的文件
以 Groovy DSL 或 YAML 表示到 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 元素允许您指定基本测试类。一定是孩子
的configuration 元素spring-cloud-contract-maven-plugin . |
实现和测试基类就位后,测试将通过,并且 应用程序和存根工件在本地 Maven 存储库中构建和安装。 现在可以合并更改,并且可以发布应用程序和存根工件 在在线存储库中。
在消费者方面
您可以使用Spring Cloud Contract Stub Runner
在集成测试中运行
WireMock 实例或消息传递路由,用于模拟实际服务。
为此,请将依赖项添加到Spring Cloud Contract Stub Runner
,作为
以下示例显示:
您可以通过以下两种方式之一将生产者端存根安装在 Maven 存储库中 方式:
-
通过签出 Producer 端存储库并添加合约并生成存根 通过运行以下命令:
$ cd local-http-server-repo $ ./mvnw clean install -DskipTests
跳过测试,因为生产者端契约实现不是 尚未到位,因此自动生成的合约测试失败。 |
-
通过从远程存储库获取现有的生产者服务存根。为此, 将存根工件 ID 和工件存储库 URL 传递为
Spring Cloud Contract Stub Runner
属性,如以下示例所示:
现在你可以使用@AutoConfigureStubRunner
.在注释中,
提供group-id
和artifact-id
值Spring Cloud Contract Stub Runner
自
为您运行协作者的存根,如以下示例所示:
@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 响应的存根版本或 协作者服务预期发出的消息。