스프링 부트 테스트: 모든 테스트에 대해 컨텍스트가 로드됩니까?
제 프로젝트에는 모든 시험을 위한 슈퍼 클래스가 있습니다.이것은 그 수업의 서명입니다.
@RunWith(SpringRunner.class)
@SpringBootTest(value = {"management.port=0"}, classes = Application.class, webEnvironment = WebEnvironment.RANDOM_PORT)
@ActiveProfiles({"localhost", "test"})
@ContextConfiguration(classes = {Application.class, SomeConfiguration.class})
@Ignore
public abstract class AIntegrationTest {
여기서 Application.class는 메인 클래스이고 SomeConfiguration.class는 일부 @Bean과 다른 것들에 대해서만 클래스이며, 화려하지 않습니다.
저는 gradle을 사용하고, 테스트를 실행하기 위해 다음을 수행합니다.
./gradlew :my-project:test
문제는 다음과 같습니다.
- 각 테스트에 대해 컨텍스트가 초기화되고 있는지 확신할 수 없습니다.하지만 저는 문맥이 여러 번 초기화된다고 확신할 수 있습니다.저는 로그를 보고 이것을 압니다.
여러 개의 콘텍스트가 초기화되기 때문에 콘텍스트가 서로 겹치는 것 같습니다.증상 중 하나가 다음 예외이기 때문에 이를 알고 있습니다.
Caused by: org.springframework.jmx.export.UnableToRegisterMBeanException: Unable to register MBean [org.springframework.cloud.context.environment.EnvironmentManager@36408d9e] with key 'environmentManager'; nested exception is javax.management.InstanceAlreadyExistsException: RedeemAway:name=environmentManager,type=EnvironmentManager
로드되는 여러 컨텍스트에 대해 신경 쓰지 않더라도 테스트가 완료되면 이전 컨텍스트가 종료되기 전에 다음 테스트에서 새 컨텍스트를 얻을 수 있습니다.위에서 예외가 겹쳐서 한 말입니다.
모든 테스트가 동일한 JVM을 공유하므로 일부 콩이 두 번 등록되면 해당 예외가 발생합니다.다음 링크에서:
다음과 같은 것으로 알려져 있습니다.
응용프로그램 컨텍스트는 로드에 사용되는 구성 매개변수의 조합으로 고유하게 식별할 수 있습니다.따라서 구성 매개 변수의 고유한 조합을 사용하여 컨텍스트가 캐시되는 키를 생성합니다.TestContext 프레임워크는 다음 구성 매개 변수를 사용하여 컨텍스트 캐시 키를 작성합니다.
그건 이해합니다만, 어떻게 하면 그것을 달성할 수 있을까요?제 목표는 동일한 JVM에서 모든 테스트를 실행하고 모든 테스트에서 컨텍스트를 재사용하는 것입니다.
2월 22일 목요일에 편집
제가 시도한 것들:
- spring.jmx.enabled: false
- spring.jmx.default-domain: some-value
Spring Cloud의 Environment Manager에 대한 경쟁이 있기 때문에 JMX를 비활성화하는 것은 도움이 되지 않습니다.
저는 제 문제에 대한 답을 찾았습니다.다음은 잘 설명된 내용입니다.
https://github.com/spring-projects/spring-boot/issues/7174
기본적으로 여러 테스트를 실행할 경우, 그 중 하나가 시작되자마자 주석을 사용할 수 있습니다.@MockBean
스프링이 컨텍스트를 다시 로드하도록 강제합니다.
보너스: 테스트에서 다음을 사용하는 경우에도 동일한 동작을 볼 수 있습니다.org.mockito.Mock
.
언급URL : https://stackoverflow.com/questions/48929585/spring-boot-test-context-loaded-for-every-test
'programing' 카테고리의 다른 글
SQL Server에서 VARCHAR에서 숫자가 아닌 문자를 가장 빨리 제거하는 방법 (0) | 2023.06.28 |
---|---|
mongodb "schema" 생산 변화 처리 방법 (0) | 2023.06.28 |
데이터셋과 데이터 리더 중 어느 것이 더 좋습니까? (0) | 2023.06.28 |
UISwip 제스처 인식기의 방향 설정 (0) | 2023.06.28 |
방화벽이 작동하지 않습니다. com.google.화력 기지설비파이어베이스설치예외. (0) | 2023.06.28 |