단일 스프링 부트 테스트 속성 재정의
다음 예를 생각해 보겠습니다.
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
properties = {
"some.property=valueA"
})
public class ServiceTest {
@Test
public void testA() { ... }
@Test
public void testB() { ... }
@Test
public void testC() { ... }
}
사용하고 있다SpringBootTest
주석의properties
설정할 속성some.property
이 테스트 스위트의 모든 테스트에 대한 속성 값.이제 이 테스트 중 하나에 대해 이 속성의 다른 값을 설정합니다(예:testC
)의 영향을 받지 않습니다.어떻게 하면 좋을까요?Spring Boot 문서의 "Testing" 장을 읽었지만 사용 사례에 맞는 항목을 찾지 못했습니다.
속성은 스프링 컨텍스트 로드 중에 스프링에 의해 평가됩니다.
따라서 컨테이너가 시작된 후에는 변경할 수 없습니다.
회피책으로 여러 클래스로 메서드를 분할하여 고유한 스프링콘텍스트를 작성할 수 있습니다.그러나 테스트 실행 속도가 빨라야 하므로 이는 좋지 않은 생각일 수 있으므로 주의해야 합니다.
더 나은 방법은 테스트 대상 클래스에 세터를 두는 것입니다.some.property
테스트에서 이 방법을 사용하여 값을 프로그래밍 방식으로 변경합니다.
private String someProperty;
@Value("${some.property}")
public void setSomeProperty(String someProperty) {
this.someProperty = someProperty;
}
갱신하다
적어도 스프링 5.2.5 및 스프링 부트 2.2.6에서는 가능
@DynamicPropertySource
static void dynamicProperties(DynamicPropertyRegistry registry) {
registry.add("some.property", () -> "valueA");
}
사용하고 있는 경우의 다른 솔루션@ConfigurationProperties
:
@Test
void do_stuff(@Autowired MyProperties properties){
properties.setSomething(...);
...
}
JUnit 5에서는 네스트된 테스트를 사용하여 필요한 코드를 줄일 수 있습니다.외부 테스트 클래스에 기본 구성을 추가하고 중첩된 테스트에 재정의 주석을 추가합니다.
다음 항목도 참조하십시오.
- spring-test-junit5에서 중첩 테스트를 사용하는 방법
- https://junit.org/junit5/docs/current/user-guide/ #writing-filename-filename
통합 테스트 중 하나에서도 같은 문제가 발생했지만@ConfigurationProperties
그게 핵심이었어요
다른 다양한 방법으로 속성을 설정하려다 실패하자 속성 클래스를 자동화하고 각 테스트에서 원하는 값을 설정하기만 하면 된다는 것을 깨달았습니다.
이게 유닛 테스트였다면저도 속성 클래스를 쉽게 비웃을 수 있었을 거예요
언급URL : https://stackoverflow.com/questions/48570766/override-a-property-for-a-single-spring-boot-test
'programing' 카테고리의 다른 글
ORA-38104: ON 절에서 참조되는 열은 업데이트할 수 없습니다. (0) | 2023.03.18 |
---|---|
woocommerce 함수로 작성된 함수를 덮어쓰려고 합니다.php 파일 (0) | 2023.03.18 |
$exists가 $cond 내에 있는 조건부 그룹화 (0) | 2023.03.18 |
Javascript 객체 푸시() 함수 (0) | 2023.03.18 |
jQuery grep()를 사용한 JSON 배열 필터링 (0) | 2023.03.18 |