Spring Boot Test 1.5에서 런타임 로컬 서버 포트를 설정할 수 없음
애플리케이션에 Spring Boot 1.5를 사용하고 있습니다.통합 테스트에서 웹 서버의 런타임 포트 번호를 가져오려고 합니다(참고:이 경우 TestRestTemplate는 유용하지 않습니다.)제가 시도한 몇 가지 접근법이 있지만 어느 것도 효과가 없는 것 같습니다.다음은 저의 접근 방식입니다.
첫 번째 접근법
@SpringBootTest(classes = TestConfig.class, webEnvironment =WebEnvironment.DEFINED_PORT)
public class RestServiceTest {
@LocalServerPort
protected int port;
내 안에서src/main/resources/config/application.properties
서버 포트를 다음과 같이 정의한 파일
server.port = 8081
하지만 이 코드에서는 오류가 발생합니다.
자리 표시자의 로컬을 확인할 수 없습니다.서버.값 "${local"의 port'입니다.server.port}"
두 번째 접근법
나는 변했다.
웹 환경 = 웹 환경.정의됨_좌현
로.
웹 환경 = 웹 환경.랜덤_좌현
그리고 내 안에서src/main/resources/config/application.properties
정의한 파일
server.port = 0
이는 첫 번째 접근 방식과 동일한 오류를 발생시킵니다.
세 번째 접근법
세 번째 접근 방식으로 사용하려고 했습니다.
protected int port;
@Autowired
Environment environment
this.port = this.environment.getProperty("local.server.port");
이것이 반환됩니다.null
가치
네 번째 접근법
마지막으로 사용하려고 했습니다.ApplicationEvents
청취할 이벤트 수신기를 만들어 포트 번호를 확인합니다.EmbeddedServletContainerIntialize
@EventListener(EmbeddedServletContainerInitializedEvent.class)
public void onApplicationEvent(EmbeddedServletContainerInitializedEvent event) {
this.port = event.getEmbeddedServletContainer().getPort();
}
public int getPort() {
return this.port;
}
에 동일하게 추가됨TestConfig
이제, 제 시험 수업에서 저는 포트를 얻기 위해 이 수신기를 사용해 보았습니다.
@SpringBootTest(classes = TestConfig.class, webEnvironment =WebEnvironment.RANDOM_PORT)
public class RestServiceTest {
protected int port;
@Autowired
EmbeddedServletContainerIntializedEventListener embeddedServletcontainerPort;
this.port = this.embeddedServletcontainerPort.getPort();
이것이 반환됩니다.0
또한 청취자 이벤트가 트리거되지 않는다는 것을 알게 되었습니다.
문서나 다른 게시물처럼 매우 간단하지만 왠지 저에게는 효과가 없습니다.도움을 주셔서 감사합니다.
테스트 웹 환경에 대해 임의 포트를 구성하는 것을 잊었을 수 있습니다.
이렇게 하면 효과가 있습니다.@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
여기서 Spring Boot 1.5.2로 방금 테스트가 성공적으로 실행되었습니다.
import static org.hamcrest.Matchers.greaterThan;
import static org.junit.Assert.assertThat;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
public class RandomPortTests {
@Value("${local.server.port}")
protected int localPort;
@Test
public void getPort() {
assertThat("Should get a random port greater than zero!", localPort, greaterThan(0));
}
}
스프링 부트 1.4를 사용하는 애플리케이션에서 동일한 문제가 발생했고 이벤트가 발생한 것을 발견했습니다.EmbeddedServletContainerInitializedEvent
약간 지연되었습니다. 즉, 내 빈이 초기화된 후에 트리거됩니다. 따라서 이 문제를 해결하려면 포트를 RestClient 빈처럼 사용해야 하는 빈에 게으른 주석을 사용해야 했고 작동했습니다.예:
@Bean
@Lazy(true)
public RESTClient restClient() {
return new RESTClient(URL + port)
}
당신은 넣는 것을 잊었습니다.@RunWith(SpringRunner.class)
당신의 학급 장식 위에.
자, 한번 해보세요.
@RunWith(SpringRunner.class)
@SpringBootTest(classes = TestConfig.class, webEnvironment =WebEnvironment.DEFINED_PORT)
public class RestServiceTest {
@LocalServerPort
int randomServerPort;
...
}
저도 같은 문제가 있었습니다.이 종속성을 추가하면 문제가 해결되었습니다.
<!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-spring -->
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-spring</artifactId>
<version>6.2.2</version>
</dependency>
언급URL : https://stackoverflow.com/questions/43491893/unable-to-set-runtime-local-server-port-in-spring-boot-test-1-5
'programing' 카테고리의 다른 글
각진, 매개 변수가 있는 Http GET? (0) | 2023.07.26 |
---|---|
Oracle 10g 데이터베이스에서 Oracle JDBC 12.1.0.1(12c 데이터베이스용)을 사용할 수 있습니까? (0) | 2023.07.26 |
오라클의 기존 테이블에서 addl 스크립트를 생성하거나 가져올 수 있는 방법은 무엇입니까?하이브에서 다시 만들어야 합니다. (0) | 2023.07.26 |
npm: '--force'와 '--legacy-peer-deps'를 사용할 때 (0) | 2023.07.26 |
다트에서 문자열의 첫 글자를 대문자로 사용하는 방법은 무엇입니까? (0) | 2023.07.26 |