programing

스프링 부트 테스트 - 테스트 속성을 찾을 수 없음

goodsources 2023. 6. 25. 18:46
반응형

스프링 부트 테스트 - 테스트 속성을 찾을 수 없음

저는 봄 부츠 프로젝트가 있는데 그것은 잘 작동합니다.이제 응용 프로그램에 대한 테스트를 작성하려고 하는데 구성 문제가 발생했습니다.

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지원되지 않습니다.이는 암묵적이긴 하지만 설명서에 명시되어 있습니다.

위의 링크에서:

https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/test/context/TestPropertySource.html

지원되는 파일 형식

기존 및 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그리고.@TestPropertySourceYAML과 함께 작동하지 않습니다.이거 보세요.

제가 직접 테스트도 해봤습니다.*.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.propertiessrc\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

반응형