我正在尝试在 REST API 开发(Spring Boot Web 应用程序)中采用Swagger 。基于 swagger 规范的 API 记录过程和代码生成效果很好,现在我遇到了使用assertj-swagger和SpringFox库编写集成测试的问题。
关于这些库的几句话。Springfox 通过在运行时检查应用程序一次以根据 Spring 配置、类结构和各种编译时 Java 注释来推断 API 语义。swagger-assertj 测试库应该将合约优先的 Swagger YAML 文件与 SpringFox 生成的代码优先的 Swagger JSON 进行比较。对于消费者驱动的合约测试,如果 assertj-swagger 发现实现中缺少消费者规范所需的资源、方法、模型或属性,则测试失败。
我的测试看起来像(测试代码取自GitHub示例):
@RunWith(SpringRunner.class)
@SpringBootTest
public class AssertJSwaggerConsumerDrivenTest {
@Test
public void validateThatImplementationSatisfiesConsumerSpecification() {
String designFirstSwagger = AssertJSwaggerConsumerDrivenTest.class.getResource("/swagger.yaml").getPath();
SwaggerAssertions.assertThat("http://localhost:8080/v2/api-docs")
.satisfiesContract(designFirstSwagger);
}
}
问题是该测试执行了很长时间并且似乎卡住了,因为在此行之后我没有看到任何日志输出:
INFO c.s.e.AssertJSwaggerConsumerDrivenTest : Started AssertJSwaggerConsumerDrivenTest in 24.03 seconds (JVM running for 26.774)
- 我确定 SpringFox 正在工作,因为我
GET http://localhost:8080/v2/api-docs
在浏览器中打开后看到了 JSON。 - 运行测试时我没有编译时或构建时错误,导致 Maven 解析依赖项并且 Spring Boot 上下文已成功初始化。
有没有人有使用 assertj-swagger 的经验,因为看起来我做错了什么?