SpringCloud 合同的不同基类

2023-12-08 17:45 更新

如果合同之间的基类不同,则可以告诉Spring Cloud Contract插件自动生成的测试应扩展哪个类。您有两种选择:

  • 遵循约定,提供packageWithBaseClasses
  • 通过baseClassMappings提供显式映射

按照惯例

约定是这样的:如果您在src/test/resources/contract/foo/bar/baz/下拥有合同,并且将packageWithBaseClasses属性的值设置为com.example.base,则Spring Cloud Contract验证者会假设存在一个BarBazBase类(位于com.example.base包中)。 换句话说,系统将获取包的最后两个部分(如果存在的话),并形成一个带有Base后缀的类。此规则优先于baseClassForTests这是一个在contracts闭包中如何工作的示例:

<plugin>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-contract-maven-plugin</artifactId>
	<configuration>
		<packageWithBaseClasses>hello</packageWithBaseClasses>
	</configuration>
</plugin>

通过映射

您可以将合同包的正则表达式手动映射到匹配合同的基类的完全限定名称。您必须提供一个名为baseClassMappings的列表,该列表由baseClassMapping对象组成,这些对象采用从contractPackageRegexbaseClassFQN的映射。 考虑以下示例:

<plugin>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-contract-maven-plugin</artifactId>
	<configuration>
		<baseClassForTests>com.example.FooBase</baseClassForTests>
		<baseClassMappings>
			<baseClassMapping>
				<contractPackageRegex>.*com.*</contractPackageRegex>
				<baseClassFQN>com.example.TestBase</baseClassFQN>
			</baseClassMapping>
		</baseClassMappings>
	</configuration>
</plugin>

假设您在以下两个位置拥有合同:* src/test/resources/contract/com/ * src/test/resources/contract/foo/

通过提供baseClassForTests,我们可以进行后备,以防映射未成功。(您也可以提供packageWithBaseClasses作为后备。)这样,从src/test/resources/contract/com/合约生成的测试扩展了com.example.ComBase,而其余测试扩展了com.example.FooBase

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号