[SPRING] @TestPropertySource가 Spring 1.2.6의 AnnotationConfigContextLoader를 사용하는 JUnit 테스트에서 작동하지 않습니다.
SPRING@TestPropertySource가 Spring 1.2.6의 AnnotationConfigContextLoader를 사용하는 JUnit 테스트에서 작동하지 않습니다.
Spring 4.1.17에서 Spring Boot 1.2.6과 아무런 관련이없는 것처럼 보입니다. RELEASE는 전혀 작동하지 않습니다. 난 그냥 응용 프로그램 속성에 액세스하고 필요한 경우 테스트 (PropertySource를 수동으로 주입 해킹을 사용하지 않고)
이건 작동하지 않습니다 ..
@TestPropertySource(properties = {"elastic.index=test_index"})
도 아니다 ..
@TestPropertySource(locations = "/classpath:document.properties")
이건 ..
@PropertySource("classpath:/document.properties")
전체 테스트 케이스 ..
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader = AnnotationConfigContextLoader.class)
@TestPropertySource(properties = {"elastic.index=test_index"})
public class PropertyTests {
@Value("${elastic.index}")
String index;
@Configuration
@TestPropertySource(properties = {"elastic.index=test_index"})
static class ContextConfiguration {
}
@Test
public void wtf() {
assertEquals("test_index", index);
}
}
~를 야기하는
org.junit.ComparisonFailure:
Expected :test_index
Actual :${elastic.index}
3.x와 4.x 사이에 많은 상충되는 정보가있는 것 같아서 확실하게 작동하는 것을 찾을 수 없습니다.
모든 통찰력은 감사하게 감사 할 것입니다. 건배!
해결법
-
==============================
1.가장 좋은 방법은 Spring이이 감독을 수정할 때까지 test.properties (또는 원하는대로)를 가져오고 @Configuration을 가져 오거나 확장하는 PropertySourcesPlaceholderConfigurer입니다.
가장 좋은 방법은 Spring이이 감독을 수정할 때까지 test.properties (또는 원하는대로)를 가져오고 @Configuration을 가져 오거나 확장하는 PropertySourcesPlaceholderConfigurer입니다.
import org.apache.commons.lang3.ArrayUtils; import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import java.io.IOException; @Configuration public class PropertyTestConfiguration { @Bean public PropertyPlaceholderConfigurer propertyPlaceholderConfigurer() throws IOException { final PropertyPlaceholderConfigurer ppc = new PropertyPlaceholderConfigurer(); ppc.setLocations(ArrayUtils.addAll( new PathMatchingResourcePatternResolver().getResources("classpath*:application.properties"), new PathMatchingResourcePatternResolver().getResources("classpath*:test.properties") ) ); return ppc; } }
이를 통해 application.properties에 기본값을 정의하고 test.properties에서이를 대체 할 수 있습니다. 물론 여러 스키마가있는 경우 필요에 따라 PropertyTestConfiguration 클래스를 구성 할 수 있습니다.
그리고 이것을 단위 테스트에 사용하십시오.
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(loader = AnnotationConfigContextLoader.class) public class PropertyTests { @Value("${elastic.index}") String index; @Configuration @Import({PropertyTestConfiguration.class}) static class ContextConfiguration { } }
-
==============================
2.@TestPropertySource의 locations 속성을 사용하여 속성을 재정의하거나 추가했습니다.
@TestPropertySource의 locations 속성을 사용하여 속성을 재정의하거나 추가했습니다.
이것은 나를 위해 일했다 (봄 4.2.4) :
@TestPropertySource(locations = { "classpath:test.properties", "classpath:test-override.properties" })
그러나 아래와 같은 속성을 재정의하지 않았습니다.
@TestPropertySource( locations = {"classpath:test.properties"}, properties = { "key=value" })
javadoc에서는 이러한 속성이 우선 순위가 가장 높다고 말합니다. 어쩌면 버그일까요?
최신 정보
버그는 스프링 부트 버전 1.4.0 이상에서 수정되어야합니다. 문제를 해결하는 커밋을 참조하십시오. 지금까지 제시된 방식으로 선언 된 속성이 우선되어야합니다.
-
==============================
3.@Value를 사용하려면 $ {...} 자리 표시자를 확인하기 위해 PropertySourcesPlaceholderConfigurer bean이 필요합니다. 여기에 수락 된 대답을보십시오 : @Value는 Java 설정 테스트 컨텍스트를 통해 설정되지 않습니다.
@Value를 사용하려면 $ {...} 자리 표시자를 확인하기 위해 PropertySourcesPlaceholderConfigurer bean이 필요합니다. 여기에 수락 된 대답을보십시오 : @Value는 Java 설정 테스트 컨텍스트를 통해 설정되지 않습니다.
-
==============================
4.나를 위해 @TestPropertySource ( "classpath : xxxxxxxx.properties")가 작동했습니다.
나를 위해 @TestPropertySource ( "classpath : xxxxxxxx.properties")가 작동했습니다.
-
==============================
5.@PropertySource ( "classpath : document.properties") 또는 @PropertySource ( "classpath * : document.properties")를 사용해 보셨나요?
@PropertySource ( "classpath : document.properties") 또는 @PropertySource ( "classpath * : document.properties")를 사용해 보셨나요?
from https://stackoverflow.com/questions/32633638/testpropertysource-doesnt-work-for-junit-test-with-annotationconfigcontextload by cc-by-sa and MIT license