【发布时间】:2017-10-19 18:42:24
【问题描述】:
我正在尝试在 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 因为看起来我做错了什么?
【问题讨论】:
标签: spring-mvc spring-boot swagger springfox assertj