스프링 부트 테스트 - 테스트 속성을 찾을 수 없음
저는 봄 부츠 프로젝트가 있는데 그것은 잘 작동합니다.이제 응용 프로그램에 대한 테스트를 작성하려고 하는데 구성 문제가 발생했습니다.
Spring boot은 Application이라는 테스트 클래스를 만들었습니다.테스트는 정말 간단합니다. 다음과 같습니다.
@RunWith(SpringRunner.class)
@SpringBootTest
public class DuurzaamApplicationTests {
@Test
public void contextLoads() {
}
}
이제 테스트를 시작하면 다음 오류가 발생합니다.
java.lang.IllegalArgumentException: Could not resolve placeholder 'company.upload' in value "${company.upload}"
src/test/resources 디렉토리에 properties.yml 파일이 있는데 어떤 이유에서인지 로드되지 않았습니다.저는 인터넷의 예시들로부터 모든 종류의 주석들을 시도해 보았지만 그것들 중 어떤 것도 작동하지 않습니다.
봄 부팅 테스트에서 application.yml 파일을 사용하여 속성을 로드하려면 어떻게 해야 합니까?
우리는 사용할 수 있습니다.@TestPropertySource
또는@PropertySource
속성 파일을 로드합니다.
예:
@RunWith(SpringRunner.class)
@SpringBootTest
@TestPropertySource("classpath:properties.yml")
@ActiveProfiles("test")
public class DuurzaamApplicationTests {
@Test
public void contextLoads() {
}
}
문서: https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/test/context/TestPropertySource.html
Spring Boot Test에서 속성 파일을 로드하면 놀랍게도.yml
지원되지 않습니다.이는 암묵적이긴 하지만 설명서에 명시되어 있습니다.
위의 링크에서:
지원되는 파일 형식
기존 및 XML 기반 속성 파일 형식(예: "classpath:/com/example/test.properties" 또는 "file:/path/to/file.xml")이 모두 지원됩니다.
.yml
언급되지 않았습니다.
그리고, 나의 것을 바꾼 후에..yml
로..properties
의 값을 다시 씁니다.xx.xx.xx=value
키-값 쌍을 올바르게 읽을 수 있습니다.
이상해요.
편집:
이제 저는 이 문제에 대한 티켓 주소를 찾았습니다. 봄에 오래 전부터 알려진 버그인 것 같습니다.
https://github.com/spring-projects/spring-framework/issues/18486
@PropertySource
그리고.@TestPropertySource
YAML과 함께 작동하지 않습니다.이거 보세요.
제가 직접 테스트도 해봤습니다.*.yml 및 *.properties라는 두 개의 파일을 만들고 직접 확인해 보십시오.
만들기 위해서*.yml
대부분의 사람들이 사용하는 일@SpringBootTest
하지만 당신이 원하는 것이 아니고 당신이 사용하고 싶은 것이라면.@ContextConfiguration
대신, 당신은 약간의 놀라움에 빠져 있습니다.
https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html 에서 이 소스가 환경 변수보다 높은 우선 순위를 가져야 한다고 표시하더라도 위의 솔루션은 작동하지 않았고 어떤 환경 변수도 @TestPropertySource에 정의된 테스트 속성을 여전히 재정의하고 있었습니다.내게 효과가 있었던 유일한 해결책은 수동으로 정의하는 것이었습니다.PropertyPlaceholderConfigurer
테스트 구성 클래스에 속하며 가장 높은 우선 순위로 설정합니다.
이것은 Spring Boot 1.5.15와 관련이 있습니다.풀어주다
@Configuration
@TestPropertySource(properties = "/application-test.properties")
@Slf4j
public class IntegrationTestConfiguration {
@Bean
public static PropertyPlaceholderConfigurer properties() {
PropertyPlaceholderConfigurer ppc
= new PropertyPlaceholderConfigurer();
Resource[] resources = new ClassPathResource[]
{ new ClassPathResource( "/application-test.properties" ) };
ppc.setLocations( resources );
ppc.setIgnoreUnresolvablePlaceholders( true );
ppc.setOrder( Ordered.HIGHEST_PRECEDENCE );
return ppc;
}
/// ....
@RunWith( SpringRunner.class )
@ActiveProfiles( "test" )
@Import( IntegrationTestConfiguration.class )
@SpringBootTest( webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT )
public class MyTest {
저도 같은 오류 메시지가 있었습니다. 제 문제는application.properties
src\test\resources
된 경우
당신의 가은너의끔너.application-test.properties
파일이 클래스 경로의 하위 폴더에 있으므로 찾을 수 없습니다.
예를 들어, 파일이 실제로 클래스 경로에 직접 있지 않기 때문에 이 파일을 찾을 수 없습니다.
@TestPropertySource("classpath:application-test.properties")
하지만 이것은 파일이 있는 경우에 발견될 것입니다.config
of the 의 경로에 folder off
@TestPropertySource("classpath:config/application-test.properties")
application-test.yml 또는 application-test.properties를 지원하는 @ActiveProfiles("test")의 주석을 사용할 수 있습니다.
언급URL : https://stackoverflow.com/questions/45659316/spring-boot-tests-cant-find-test-properties
'programing' 카테고리의 다른 글
파이썬의 IDLE 창을 지울 방법이 있습니까? (0) | 2023.06.25 |
---|---|
Git: 새 원격 분기를 볼 수 없습니다. (0) | 2023.06.25 |
보안 규칙에서 화재 기준 비율 제한? (0) | 2023.06.25 |
Python을 사용하여 ssh를 통해 명령 수행 (0) | 2023.06.25 |
스프링 데이터 탄력적 검색을 사용한 탄력적 검색 Rest 클라이언트 (0) | 2023.06.25 |