Java Spring Boot Test: 테스트 컨텍스트에서 Java 컨피규레이션클래스를 제외하는 방법
스프링 부트 기능이 있는 Java 웹 앱을 가지고 있습니다.
테스트를 실행할 때 일부 Java 구성 파일을 제외해야 합니다.
테스트 구성(테스트 실행 시 포함 필요):
@TestConfiguration
@PropertySource("classpath:otp-test.properties")
public class TestOTPConfig { }
실제 가동 구성(테스트 실행 시 제외 필요):
@Configuration
@PropertySource("classpath:otp.properties")
public class OTPConfig { }
테스트 클래스(명시적 설정 클래스 포함):
@RunWith(SpringRunner.class)
@SpringBootTest(classes = TestAMCApplicationConfig.class)
public class AuthUserServiceTest { .... }
테스트 구성:
@TestConfiguration
@Import({ TestDataSourceConfig.class, TestMailConfiguration.class, TestOTPConfig.class })
@TestPropertySource("classpath:amc-test.properties")
public class TestAMCApplicationConfig extends AMCApplicationConfig { }
클래스도 있습니다.
@SpringBootApplication
public class AMCApplication { }
테스트 실행 중OTPConfig쓰긴 했지만TestOTPConfig...
어떻게 해야 하죠?
일반적으로 스프링 프로파일을 사용하여 활성 프로파일에 따라 스프링 콩을 포함하거나 제외합니다.상황에 따라 기본적으로 활성화될 수 있는 프로덕션 프로파일과 테스트 프로파일을 정의할 수 있습니다.프로덕션 구성 클래스에서 프로덕션 프로파일을 지정할 수 있습니다.
@Configuration
@PropertySource("classpath:otp.properties")
@Profile({ "production" })
public class OTPConfig {
}
test config 클래스는 테스트프로파일을 지정합니다.
@TestConfiguration
@Import({ TestDataSourceConfig.class, TestMailConfiguration.class, TestOTPConfig.class })
@TestPropertySource("classpath:amc-test.properties")
@Profile({ "test" })
public class TestAMCApplicationConfig extends AMCApplicationConfig {
}
다음으로 테스트 클래스에서 액티브한 프로파일을 말할 수 있습니다.
@RunWith(SpringRunner.class)
@SpringBootTest(classes = TestAMCApplicationConfig.class)
@ActiveProfiles({ "test" })
public class AuthUserServiceTest {
....
}
프로젝트를 운영 환경에서 실행할 때 환경 변수를 설정하여 "운영"을 기본 활성 프로파일로 포함합니다.
JAVA_OPTS="-Dspring.profiles.active=production"
물론 실제 가동 시작 스크립트는 Java 환경변수를 설정하기 위해 JAVA_OPTS 이외의 다른 것을 사용할 수도 있지만, 어떻게 해서든 설정해야 합니다.spring.profiles.active.
를 사용할 수도 있습니다.@ConditionalOnProperty다음과 같습니다.
@ConditionalOnProperty(value="otpConfig", havingValue="production")
@Configuration
@PropertySource("classpath:otp.properties")
public class OTPConfig { }
및 테스트의 경우:
@ConditionalOnProperty(value="otpConfig", havingValue="test")
@Configuration
@PropertySource("classpath:otp-test.properties")
public class TestOTPConfig { }
그런 다음 에 지정합니다.main/resources/config/application.yml
otpConfig: production
그리고 당신의 안에test/resources/config/application.yml
otpConfig: test
또, 불필요한 설정을 시뮬레이트 할 수도 있습니다.예를 들어 다음과 같습니다.
@MockBean
private AnyConfiguration conf;
시험 수업에 넣으세요.이렇게 하면 진짜가 되는 것을 피할 수 있을 것이다.AnyConfiguration로드 중입니다.
또, 자동 설정을 제외하는 경우는, 다음의 순서에 따릅니다.
@EnableAutoConfiguration(exclude=CassandraDataAutoConfiguration.class)
public class // ...
테스트 폴더의 "쓸데없는" 미러와 동일한 클래스를 만듭니다. 예를 들어 다음과 같습니다.
src에는 /app/MyConfig.java가 있습니다.
@Configuration을 사용하여 테스트 폴더에 /app/MyConfig.java를 만들고 그 안에 빈 본문을 남깁니다.
테스트 및 로드 중에 프로파일 설정OTPConfig프로파일이 활성화되지 않은 경우에만 해당됩니다.
@Profile("!test")
@Configuration
class OTPConfig { ... }
@SpringBootTest(properties = ["spring.profiles.include=test"])
public class AuthUserServiceTest { .... }
내가 사용하는 가장 쉬운 방법은-
- 놓다
@ConditionalOnProperty내 주요 소스코드로요. - 그런 다음 테스트빈을 정의하고 테스트 설정의 일부로 추가합니다.이 설정을 메인 테스트클래스로 Import 하거나 다른 방법으로 Import 합니다.이것은 테스트빈을 등록해야 할 경우에만 필요합니다.그 콩이 필요 없다면 다음 단계로 넘어가세요.
- src/test/resources 아래의 application.properties에 속성을 추가하여 메인 폴더에 있는 구성 클래스를 사용하지 않도록 설정합니다.
보일라!
하시면 됩니다.@ConditionalOnMissingClass("org.springframework.test.context.junit4.SpringJUnit4ClassRunner")를 선택합니다.SpringJUnit4ClassRunner는 테스트 환경에서만 종료되는 모든 클래스로 대체될 수 있습니다.
언급URL : https://stackoverflow.com/questions/39729752/java-spring-boot-test-how-to-exclude-java-configuration-class-from-test-context
'source' 카테고리의 다른 글
| 공급자가 Oracle 클라이언트 버전과 호환되지 않습니다. (0) | 2023.03.16 |
|---|---|
| WooCommerce에서 다운로드 가능한 제품 기능을 비활성화하는 방법 (0) | 2023.03.16 |
| 개체를 파괴하고 결과 중 하나를 무시하는 중 (0) | 2023.03.16 |
| --disable-web-security는 Chrome에서 동작하게 되었습니까? (0) | 2023.03.16 |
| Gradle 태스크에 시스템 속성을 전달하는 방법 (0) | 2023.03.16 |