从某一地点获取存根或合同定义
与其从Artifactory、Nexus 或 Git 中选择存根或合同定义,你可以指向驱动器上的位置或类路径。这样做在多模块项目中尤其有用,因为某个模块希望重用另一个模块的存根或合同,而不需要实际安装这些到本地专家仓库中以提交这些更改到 Git。
为了实现这一点,你可以使用存根://当仓库根参数设置时,协议可以是在 Stub Runner 或 Spring Cloud Contract 插件中。
在这个例子中,制作人项目已成功完成建成并生成了小作品目标/小作品文件夹。 作为消费者,可以通过使用存根://协议。
注解
@AutoConfigureStubRunner(
stubsMode = StubRunnerProperties.StubsMode.REMOTE,
repositoryRoot = "stubs://file://location/to/the/producer/target/stubs/",
ids = "com.example:some-producer")
JUnit 4 规则
@Rule
public StubRunnerRule rule = new StubRunnerRule()
.downloadStub("com.example:some-producer")
.repoRoot("stubs://file://location/to/the/producer/target/stubs/")
.stubsMode(StubRunnerProperties.StubsMode.REMOTE);
JUnit 5 扩展
@RegisterExtension
public StubRunnerExtension stubRunnerExtension = new StubRunnerExtension()
.downloadStub("com.example:some-producer")
.repoRoot("stubs://file://location/to/the/producer/target/stubs/")
.stubsMode(StubRunnerProperties.StubsMode.REMOTE);
合同和存根可以存储在一个位置,每个生产者都有自己的专用文件夹用于合同和存根映射。在该文件夹下,每个消费者都可以拥有自己的设置。要让存根运行者从提供的ID中找到专用文件夹,你可以传递stubs.find-producer=true财产或spring.cloud.contract.stubrunner.stubs.find-producer=true系统财产。以下列表展示了合同和小作品的排列:
└── com.example (1)
├── some-artifact-id (2)
│ └── 0.0.1
│ ├── contracts (3)
│ │ └── shouldReturnStuffForArtifactId.groovy
│ └── mappings (4)
│ └── shouldReturnStuffForArtifactId.json
└── some-other-artifact-id (5)
├── contracts
│ └── shouldReturnStuffForOtherArtifactId.groovy
└── mappings
└── shouldReturnStuffForOtherArtifactId.json
| 1 | 消费者的群体识别 |
| 2 | 带有文物ID [some-artifact-id] 的消费者 |
| 3 | 具有工件ID [some-artifact-id] 的消费者合同 |
| 4 | 具有工件ID [some-artifact-id] 的消费者映射 |
| 5 | 带有产物ID [some-other-artifact-id] 的消费者 |
注解
@AutoConfigureStubRunner(
stubsMode = StubRunnerProperties.StubsMode.REMOTE,
repositoryRoot = "stubs://file://location/to/the/contracts/directory",
ids = "com.example:some-producer",
properties="stubs.find-producer=true")
JUnit 4 规则
static Map<String, String> contractProperties() {
Map<String, String> map = new HashMap<>();
map.put("stubs.find-producer", "true");
return map;
}
@Rule
public StubRunnerRule rule = new StubRunnerRule()
.downloadStub("com.example:some-producer")
.repoRoot("stubs://file://location/to/the/contracts/directory")
.stubsMode(StubRunnerProperties.StubsMode.REMOTE)
.properties(contractProperties());
JUnit 5 扩展
static Map<String, String> contractProperties() {
Map<String, String> map = new HashMap<>();
map.put("stubs.find-producer", "true");
return map;
}
@RegisterExtension
public StubRunnerExtension stubRunnerExtension = new StubRunnerExtension()
.downloadStub("com.example:some-producer")
.repoRoot("stubs://file://location/to/the/contracts/directory")
.stubsMode(StubRunnerProperties.StubsMode.REMOTE)
.properties(contractProperties());