SpringCloud 三秒游
这个非常简短的导览使用Spring Cloud Contract来完成:
- 名为“在生产者端”的部分
- “消费者方面”一节
您可以在这里找到更长的行程 。
要开始使用Spring Cloud Contract,请将具有REST/
消息合同(以Groovy DSL或YAML表示)的文件添加到由contractsDslDir
属性设置的合同目录中。默认情况下为$rootDir/src/test/resources/contracts
。
然后将Spring Cloud Contract Verifier依赖项和插件添加到您的构建文件中,如以下示例所示:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-contract-verifier</artifactId> <scope>test</scope> </dependency>
以下清单显示了如何添加插件,该插件应放在文件的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
控制器设置或消息传递测试设置)。
一旦实现和测试基类就位,测试就会通过,并且将应用程序和存根构件都构建并安装在本地Maven存储库中。现在可以合并更改,并且可以在在线存储库中发布应用程序和存根工件。
Spring Cloud Contract Stub Runner
可以用于集成测试中,以获取模拟实际服务的运行中WireMock实例或消息传递路由。
为此,请将依赖项添加到Spring Cloud Contract Stub Runner
中,如以下示例所示:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-contract-stub-runner</artifactId> <scope>test</scope> </dependency>
您可以通过以下两种方式之一在Maven存储库中安装生产者端存根:
-
通过检出生产者端存储库并添加合同并通过运行以下命令来生成存根:
$ cd local-http-server-repo $ ./mvnw clean install -DskipTests
由于生产者方合同实施尚未到位,因此跳过了测试,因此自动生成的合同测试失败。
-
通过从远程存储库获取已经存在的生产者服务存根。为此,请将存根工件ID和工件存储库URL作为
Spring Cloud Contract Stub Runner
属性传递,如以下示例所示:stubrunner: ids: 'com.example:http-server-dsl:+:stubs:8080' repositoryRoot: https://repo.spring.io/libs-snapshot
现在,您可以使用@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响应或消息的存根版本。
更多建议: