AssertJ Swagger 测试卡在执行中

AssertJ Swagger test is stuck on executing

我正在尝试采用 Swagger in REST API development (Spring Boot web application). API documenting process and code generation based on swagger spec works good, and now I've faced a problem writing integration tests using assertj-swagger and SpringFox 库。

关于这些库的几句话。 Springfox 通过在运行时检查应用程序一次,根据 Spring 配置、class 结构和各种编译时 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)

有没有人有使用 assertj-swagger 的经验,因为看起来我做错了什么?

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

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 选项中。