Java 我们使用Spring云契约实际测试的是什么?
正如文件中所述 云合约有助于用户成功实施消费者协议 驱动契约方法 我在另一个博客上读到了这篇文章 契约测试的本质不是断言功能。我们想要实现的是验证语义。如果生产者和消费者能够在生产过程中成功沟通 我开始实现它们,并在生产者端编写代码, 我的控制器类是:Java 我们使用Spring云契约实际测试的是什么?,java,mockito,spring-cloud-contract,Java,Mockito,Spring Cloud Contract,正如文件中所述 云合约有助于用户成功实施消费者协议 驱动契约方法 我在另一个博客上读到了这篇文章 契约测试的本质不是断言功能。我们想要实现的是验证语义。如果生产者和消费者能够在生产过程中成功沟通 我开始实现它们,并在生产者端编写代码, 我的控制器类是: @PostMapping(path = "/getone", consumes = "application/json", produces = "application/json")
@PostMapping(path = "/getone", consumes = "application/json", produces = "application/json")
public ResponseEntity<Response> getone(@RequestBody Test[] test) {
String appId = Utils.getId();
return new ResponseEntity<>(service.pub(test,id), HttpStatus.OK);
}
我的问题是,
1.合同对我的API有何实际帮助?如果我在模仿我的服务的底层实现,那么开发人员总是可能在源代码中更新实际实现,而忘记更新契约。在这种情况下,合同仍然会针对使用模拟服务的生产者运行,并且如果源代码发生更改,合同会通过吗?这将如何保证API对消费者的稳定性
2.我们应该根据输入为API的不同行为创建契约,还是只为积极案例创建一个契约,为消极案例创建一个契约?您可以在文档中阅读更多关于入门的信息,嘿@MarcinGrzejszczak我确实浏览了文档,但我想更好地理解……如果有人可以的话澄清问题,这将非常好:)我确实找到了问题第二部分的答案,即“我们假设您将创建两个契约,一个用于正面案例,一个用于负面案例。契约测试用于测试应用程序之间的契约,而不是模拟完整的行为。”
@ExtendWith(SpringExtension.class)
@ActiveProfiles("test")
@SpringBootTest
public class ContractTest {
@Mock
private Service service;
@Mock
private Utils utils;
@BeforeEach
void static setup(@Autowired Controller controller) {
try (MockedStatic mocked = mockStatic(Utils.class)) {
mocked.when(() -> Utils.getId()).thenReturn("194");
Mockito.when(service.pub(anyString(),anyString())).thenReturn(TestUtils.publish_success_response());
controller.setPublishService(service);
StandaloneMockMvcBuilder standaloneMockMvcBuilder = MockMvcBuilders.standaloneSetup(controller);
RestAssuredMockMvc.standaloneSetup(standaloneMockMvcBuilder);
}