spring 云合约POC

spring cloud contract POC

我正在尝试为我的团队创建一个示例 POC 以使用 Spring 云合同。

我能够收到生产者方面的绿色通行证,但在消费者方面,我一直收到
No stubs or contracts were found for [com.datson:cloudcontract-producer:+:stubs] and the switch to fail on no stubs was set. 合同存在。

我尝试了官方 spring 云文档中描述的几个用户案例。

@AutoConfigureStubRunner(ids = "com.datson:cloudcontract-producer:+:8080", stubsMode = StubRunnerProperties.StubsMode.LOCAL)

@AutoConfigureStubRunner(ids = "com.datson:cloudcontract-producer:+:stubs"

https://cloud.spring.io/spring-cloud-contract/reference/html/getting-started.html#getting-started-cdc-consumer-run

这是消费者代码示例:https://github.com/Yayan89/springboot-config-server/tree/master/cloudcontract-consumer
这里是生产者代码示例:https://github.com/Yayan89/springboot-config-server/tree/master/cloudcontract-producer

可能是我错过了一些愚蠢的事情。

在提供的示例中,您需要在本地 m2 中安装一个 jar 以从消费者端获取它(请阅读有关如何直接从驱动器获取合同的文档)。如果你检查这个示例和 gradle 构建 https://github.com/spring-cloud-samples/spring-cloud-contract-samples/blob/master/scripts/runGradleBuilds.sh#L37 你会发现你应该 运行 像这样

./gradlew build publishToMavenLocal

假设您有 maven-publish 插件或

./gradlew build install

假设您有一个 maven 插件

感谢@MarcinGrejszzak 的回复,我只想确认一件事我是否理解正确。生产者需要为消费者发布 mavenlocal (.m2) 才能构建它。我的说法正确吗?

id 'maven-publish' 我们需要在 gradle/mvn build

中添加我们的生产者
implementation("com.datson:cloudcontract-producer:+:stubs") {
        transitive = false
    }

我的代码现在适用于

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK)
@AutoConfigureStubRunner(
    stubsMode = StubRunnerProperties.StubsMode.LOCAL,
    ids = "com.datson:cloudcontract-producer:+:stubs:0.0.1:8090"
)
@AutoConfigureMockMvc
public class LoanApplicationServiceTest {

@Autowired
MockMvc mockMvc;

@Test
public void given_WhenPassEvenNumberInQueryParam_ThenReturnEven() throws Exception {

    mockMvc.perform(MockMvcRequestBuilders.put("/fraudcheck")
        .contentType(MediaType.APPLICATION_JSON))
        .andExpect(MockMvcResultMatchers.status().isOk())
        .andExpect(MockMvcResultMatchers.content().string("Even"));
}}