【问题标题】:AssertJ Swagger test is stuck on executingAssertJ Swagger 测试卡在执行中
【发布时间】:2017-10-19 18:42:24
【问题描述】:

我正在尝试在 REST API 开发(Spring Boot Web 应用程序)中采用 Swagger。基于 swagger 规范的 API 记录过程和代码生成效果很好,现在我在使用 assertj-swaggerSpringFox 库编写集成测试时遇到了问题。

简单介绍一下这些库。 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


    【解决方案1】:

    我已经成功运行了我的AssertJSwaggerConsumerDrivenTest!我想我以前从来没有这么高兴过看到很多红色的测试结果 =) 反正总比永远运行测试要好。

    AssertJ-Swagger 的 readme 有点过时了。这是我为解决问题所做的更改。

    测试代码:

    @RunWith(SpringRunner.class)
    @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
    public class AssertJSwaggerConsumerDrivenTest {
    
        @LocalServerPort
        int randomPort;
    
        @Test
        public void validateThatImplementationSatisfiesConsumerSpecification() {
            File designFirstSwagger = new File(AssertJSwaggerConsumerDrivenTest.class.getResource("/swagger.yaml").getFile());
            SwaggerAssertions.assertThat("http://localhost:" + randomPort + "/v2/api-docs")
                    .satisfiesContract(designFirstSwagger.getAbsolutePath());
        }    
    }
    

    pom.xml:

    <dependency>
        <groupId>io.github.robwin</groupId>
        <artifactId>assertj-swagger</artifactId>
        <version>0.6.0</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.assertj</groupId>
        <artifactId>assertj-core</artifactId>
        <version>3.8.0</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>io.swagger</groupId>
        <artifactId>swagger-parser</artifactId>
        <version>1.0.30</version>
        <scope>test</scope>
    </dependency>
    

    我还得到了java.lang.OutOfMemoryError: Permgen space,所以我必须将这个-XX:MaxPermSize=384m 添加到 VM 选项中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-07
      • 1970-01-01
      • 2016-03-30
      • 1970-01-01
      • 1970-01-01
      • 2020-11-16
      • 2016-08-18
      相关资源
      最近更新 更多