SpringCloud 合同的不同基类
如果合同之间的基类不同,则可以告诉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
对象组成,这些对象采用从contractPackageRegex
到baseClassFQN
的映射。
考虑以下示例:
<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
。
更多建议: