首页 文章

AssertJ Swagger测试坚持执行

提问于
浏览
0

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

关于这些库的一些小词 . Springfox通过检查应用程序来工作,一次,在运行时根据Spring配置,类结构和各种编译时间Java注释来推断API语义 . swagger-assertj测试库应该将 Contract 优先的Swagger YAML文件与SpringFox生成的代码优先的Swagger JSON进行比较 . 对于消费者驱动的 Contract 测试,如果在实现中发现消费者规范所需的资源,方法,模型或属性缺失,则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正在工作,因为我在浏览器中打开_1189044后看到了JSON .

  • 运行测试时没有编译时错误或构建时错误,导致Maven解析依赖关系并成功初始化Spring Boot上下文 .

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

1 回答

  • 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选项中 .

相关问题