我有一个使用Sping Boot (最新版本)的应用程序,并创建了一个具有REST风格API的后端。通常,我创建的控制器如下:
@RestController
@RequestMapping("/contacts")
public class ContactController {
@Autowired
private ContactService service;
@RequestMapping(value = "/contactId/{contactId}",
method = RequestMethod.GET, headers = "Accept=application/json")
public @ResponseBody ContactEntity getContactById(@PathVariable("contactId") long contactId) {
ContactEntity contactEntity = service.getContactById(contactId);
return contactEntity;
}
而综合测试一直是这样的:
@ExtendWith(SpringExtension.class)
@SpringBootTest(classes = ServiceContextConfiguration.class)
@ComponentScan("com.tomholmes.springboot.phonebook.server")
@Transactional
@WebAppConfiguration
public class ContactControllerTest {
@Test
public void testGetContactById() throws Exception {
MockHttpServletRequestBuilder requestBuilder =
MockMvcRequestBuilders.get(BASE_URL + "/contactId/6");
this.mockMvc.perform(requestBuilder)
.andDo(print())
.andExpect(status().isOk());
}
}
多年来,这一直是一个“代码优先”的API。现在,我使用OpenAPI 3和一个YAML文件来处理一个契约优先的API。API在与以前相同的位置生成,我希望测试能像以前一样工作,但它没有。
所以有一个资源:
[https://www.hascode.com/2018/08/testing-openapi-swagger-schema-compliance-with-java-junit-and-assertj-swagger/#API_Test]建议我使用assertj-swagger进行OpenAPI / Swagger合约测试。
这是唯一的路要走吗?有没有办法让我使用我的旧传统测试,我发现作为一个集成测试非常有用。
我还在研究第三种方法:[https://www.testcontainers.org/modules/mockserver/]我也会尝试一下,我相信它会起作用的。
我还想知道是否有代码可以自动生成测试,就像生成API端点和模型一样,如果Open API 3也能够很好地生成测试,这将是有意义的。
最后,如果可以的话,我想使用我的旧测试方法,但如果不行,那么我将尝试其他方法。
1条答案
按热度按时间bgibtngc1#
我们在切换到开放式API协定后遇到了同样的问题,首先使用自动生成的控制器/委托接口。修复方法是除了导入控制器本身之外,还导入委托实现。示例:
FeatureController
是由open-api生成的控制器,通常位于target的generated-sources文件夹中。FeatureDelegateImpl
是我们自己的委托接口实现,位于src/main文件夹中。