codecamp

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-idartifact-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响应或消息的存根版本。


SpringCloud Contract目的
SpringCloud 三分钟游
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

三、Spring Cloud Netflix

SpringCloud Hystrix超时和Ribbon客户

SpringCloud 重试失败的请求

五、Spring Cloud Stream

六、SpringCloud Binder实现

SpringCloud 重试RabbitMQ Binder

SpringCloud Dead-Letter队列处理

八、Spring Cloud Sleuth

SpringCloud 当前Span

十二、Spring Cloud for Cloud Foundry

十三、Spring Cloud Contract

Spring Cloud Contract验证程序设置

SrpingCloud Gradle项目

十五、Spring Cloud网关

Spring Cloud 配置路由谓词工厂和网关过滤工厂

Spring Cloud TLS / SSL

Spring Cloud网关配置

SpringCloud 故障排除

十八、Spring Cloud GCP

Spring Cloud GCP Spring资源

Spring Cloud Spring JDBC

Spring Cloud Redis的Cloud Memorystore

Spring Cloud 云身份识别代理(IAP)身份验证

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }