REST API 개발 ( Spring Boot 웹 애플리케이션) 에서 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)
GET http://localhost:8080/v2/api-docs
합니다. 브라우저에서 연 후 JSON이 표시 되기 때문입니다.assertj-swagger를 사용한 경험이있는 사람이 있나요?
나는 내 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 옵션 에 추가해야 했습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다