@TestPropertySource는 봄 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 사이에 모순되는 정보가 많은 것 같고, 확실히 동작할 수 있는 것을 찾을 수 없습니다.
어떤 통찰이라도 감사히 받겠습니다.건배!
(봄이 이 감시를 고칠 때까지) 가장 좋은 방법은PropertySourcesPlaceholderConfigurer
test.properties(또는 원하는 것)를 불러옵니다.@Import
또는 그것을 확장한다.@Configuration
.
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 {
}
}
제가 사용한 것은locations
의 특성@TestPropertySource
속성을 덮어쓰거나 추가합니다.
이것은 나에게 효과가 있었다(스프링 4.2.4):
@TestPropertySource(locations = {
"classpath:test.properties",
"classpath:test-override.properties" })
그러나 다음과 같은 속성을 덮어쓰지는 않았습니다.
@TestPropertySource(
locations = {"classpath:test.properties"},
properties = { "key=value" })
javadoc은 이러한 속성이 가장 높은 우선순위를 갖는다고 하지만,벌레가 아닐까?
갱신하다
이 버그는 Spring 부트버전 1.4.0 이후에 수정될 것입니다.문제를 종료하는 커밋을 참조해 주세요.지금까지 제시된 방법으로 선언된 속성이 우선되어야 합니다.
@Value를 사용하려면 PropertySourcesPlaceholderConfigr bean이 필요합니다.${...}
플레이스 홀더승인된 답변은 여기를 참조하십시오.@Value는 Java 구성 테스트 컨텍스트에서 설정되지 않습니다.
이 문제가 있고 yaml을 속성 파일로 사용하려는 경우 해당 봄에 유의하십시오.@TestPropertySource
그리고.@PropertySource
yaml 파일에서는 동작하지 않으며 속성이 올바르게 로드되지 않습니다.
https://github.com/spring-projects/spring-boot/issues/10772#issuecomment-339581902
Me의 경우 @TestPropertySource("classpath:xxxxxxxxxx.properties")가 동작했습니다.
사용해보셨습니까?@PropertySource("classpath:document.properties")
또는@PropertySource("classpath*:document.properties")
?
@TestPropertySource에 문제가 있었습니다.test.properties를 찾을 수 없습니다.
아래는 수정 전의 것입니다.
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = ExtContext.class)
@TestPropertySource(locations = "classpath: test.properties")
classpath:와 test.properties 사이의 공간을 다음과 같이 제거했습니다.
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = ExtContext.class)
@TestPropertySource(locations = "classpath:test.properties")
test.properties가 classpth에 없을 때, 당신에게도 도움이 되지 않습니다.
언급URL : https://stackoverflow.com/questions/32633638/testpropertysource-doesnt-work-for-junit-test-with-annotationconfigcontextload
'programing' 카테고리의 다른 글
X-Sendfile 헤더가 작동하는지 테스트합니다. (0) | 2023.03.12 |
---|---|
AngularJS - 커스텀 디렉티브에서 ngModel 값을 변경하는 방법 (0) | 2023.03.12 |
각도 JS: js 파일을 부분적으로 로드하는 방법 (0) | 2023.03.12 |
자동 추가 제거자동 추가 제거문자 그대로의 내용이 없는 페이지(숏 코드 사용)에서 (0) | 2023.03.12 |
반응 후크의 oldValues와 newValues를 비교하는 방법 useEffect? (0) | 2023.03.12 |