Loading...
Spring Framework Reference Documentation 7.0.2의 Spring JUnit Jupiter Testing Annotations의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
다음 어노테이션들은
SpringExtension
과 JUnit Jupiter (즉, JUnit의 프로그래밍 모델)와 함께 사용될 때 지원됩니다:
@SpringJUnitConfig@SpringJUnitWebConfig@TestConstructor@NestedTestConfiguration@EnabledIf@DisabledIf@DisabledInAotMode@SpringJUnitConfig@SpringJUnitConfig는 JUnit Jupiter의 @ExtendWith(SpringExtension.class)와 Spring TestContext Framework의 @ContextConfiguration을 결합한 합성 어노테이션입니다. 이는 클래스 수준에서 @ContextConfiguration의 drop-in replacement로 사용할 수 있습니다.
설정 옵션과 관련하여, @ContextConfiguration과 @SpringJUnitConfig 사이의 유일한 차이점은 컴포넌트 클래스를 @SpringJUnitConfig의 value 속성으로 선언할 수 있다는 점입니다.
다음 예제는 설정 클래스를 지정하기 위해 @SpringJUnitConfig 어노테이션을 사용하는 방법을 보여줍니다:
1@SpringJUnitConfig(TestConfig.class) // (1) 2class ConfigurationClassJUnitJupiterSpringTests { 3 // class body... 4} 5// Copied!
| 1 | 설정 클래스를 지정합니다. |
1@SpringJUnitConfig(TestConfig::class) // (1) 2class ConfigurationClassJUnitJupiterSpringTests { 3 // class body... 4} 5// Copied!
| 1 | 설정 클래스를 지정합니다. |
다음 예제는 설정 파일의 위치를 지정하기 위해 @SpringJUnitConfig 어노테이션을 사용하는 방법을 보여줍니다:
1@SpringJUnitConfig(locations = "/test-config.xml") // (1) 2class XmlJUnitJupiterSpringTests { 3 // class body... 4} 5// Copied!
| 1 | 설정 파일의 위치를 지정합니다. |
1@SpringJUnitConfig(locations = ["/test-config.xml"]) // (1) 2class XmlJUnitJupiterSpringTests { 3 // class body... 4} 5// Copied!
| 1 | 설정 파일의 위치를 지정합니다. |
자세한 내용은 Context Management와
@SpringJUnitConfig
및 @ContextConfiguration의 javadoc을 참조하십시오.
@SpringJUnitWebConfig@SpringJUnitWebConfig는 JUnit Jupiter의 @ExtendWith(SpringExtension.class)와 Spring TestContext Framework의 @ContextConfiguration 및 @WebAppConfiguration을 결합한 합성 어노테이션입니다. 이는 클래스 수준에서 @ContextConfiguration 및 @WebAppConfiguration의 drop-in replacement로 사용할 수 있습니다.
설정 옵션과 관련하여, @ContextConfiguration과 @SpringJUnitWebConfig 사이의 유일한 차이점은 @SpringJUnitWebConfig에서 value 속성을 사용하여 컴포넌트 클래스를 선언할 수 있다는 점입니다. 추가로, @SpringJUnitWebConfig의 resourcePath 속성을 사용해서만 @WebAppConfiguration의 value 속성을 오버라이드할 수 있습니다.
다음 예제는 설정 클래스를 지정하기 위해 @SpringJUnitWebConfig 어노테이션을 사용하는 방법을 보여줍니다:
1@SpringJUnitWebConfig(TestConfig.class) // (1) 2class ConfigurationClassJUnitJupiterSpringWebTests { 3 // class body... 4} 5// Copied!
| 1 | 설정 클래스를 지정합니다. |
1@SpringJUnitWebConfig(TestConfig::class) // (1) 2class ConfigurationClassJUnitJupiterSpringWebTests { 3 // class body... 4} 5// Copied!
| 1 | 설정 클래스를 지정합니다. |
다음 예제는 설정 파일의 위치를 지정하기 위해 @SpringJUnitWebConfig 어노테이션을 사용하는 방법을 보여줍니다:
1@SpringJUnitWebConfig(locations = "/test-config.xml") // (1) 2class XmlJUnitJupiterSpringWebTests { 3 // class body... 4} 5// Copied!
| 1 | 설정 파일의 위치를 지정합니다. |
1@SpringJUnitWebConfig(locations = ["/test-config.xml"]) // (1) 2class XmlJUnitJupiterSpringWebTests { 3 // class body... 4} 5// Copied!
| 1 | 설정 파일의 위치를 지정합니다. |
자세한 내용은 Context Management와
@SpringJUnitWebConfig,
@ContextConfiguration,
@WebAppConfiguration
의 javadoc을 참조하십시오.
@TestConstructor@TestConstructor는 테스트 클래스에 적용되어 테스트 클래스 생성자의 매개변수가 테스트의
ApplicationContext의 컴포넌트로부터 어떻게 자동 주입될지를 구성하는 어노테이션입니다.
@TestConstructor가 테스트 클래스에 존재하지 않거나 메타 존재하지 않은 경우, 기본 테스트
_생성자 자동 주입 모드_가 사용됩니다. 기본 모드를 변경하는 방법에 대한 자세한 내용은 아래 팁을 참조하십시오.
그러나 생성자에 대한 @Autowired 또는
@jakarta.inject.Inject의 로컬 선언은 @TestConstructor와 기본 모드 둘 다보다 우선합니다.
기본 테스트 생성자 자동 주입 모드 변경<br>기본 _테스트 생성자 자동 주입 모드_는 JVM 시스템 프로퍼티<br>spring.test.constructor.autowire.mode를 all로 설정하여 변경할 수 있습니다. 또는,<br>기본 모드는<br>SpringProperties 메커니즘을 통해 설정할 수 있습니다.<br>기본 모드는 또한<br>JUnit Platform configuration parameter로 구성할 수 있습니다.<br>spring.test.constructor.autowire.mode 프로퍼티가 설정되지 않은 경우,<br>테스트 클래스 생성자는 자동으로 자동 주입되지 않습니다. |
@TestConstructor는 JUnit Jupiter와 함께 사용하기 위한 SpringExtension과 함께 사용할 때만 지원됩니다.<br>SpringExtension은 종종 자동으로 등록된다는 점에 유의하십시오. 예를 들어,<br>@SpringJUnitConfig 및 @SpringJUnitWebConfig와 같은 어노테이션이나 Spring Boot Test의<br>다양한 테스트 관련 어노테이션을 사용할 때 자동으로 등록됩니다. |
@NestedTestConfiguration@NestedTestConfiguration은 테스트 클래스에 적용되어 inner 테스트 클래스에 대한 enclosing 클래스
계층 구조 내에서 Spring 테스트 설정 어노테이션이 어떻게 처리되는지 구성하는 어노테이션입니다.
@NestedTestConfiguration이 테스트 클래스, 그 supertype 계층 구조, 또는 enclosing 클래스 계층 구조에 존재하지 않거나 메타 존재하지 않은 경우, 기본 enclosing
_설정 상속 모드_가 사용됩니다. 기본 모드를 변경하는 방법에 대한 자세한 내용은 아래 팁을 참조하십시오.
기본 enclosing 설정 상속 모드 변경<br>기본 _enclosing 설정 상속 모드_는 INHERIT이지만,<br>spring.test.enclosing.configuration JVM 시스템 프로퍼티를 OVERRIDE로 설정하여 변경할 수 있습니다.<br>또는, 기본 모드는<br>SpringProperties 메커니즘을 통해 설정할 수 있습니다. |
Spring TestContext Framework는 다음 어노테이션들에 대해 @NestedTestConfiguration 시맨틱을 준수합니다.
@BootstrapWith@ContextConfiguration@WebAppConfiguration@ContextHierarchy@ContextCustomizerFactories@ActiveProfiles@TestPropertySource@DynamicPropertySource@DirtiesContext@TestExecutionListeners@RecordApplicationEvents@Transactional@Commit@Rollback@Sql@SqlConfig@SqlMergeMode@TestConstructor@NestedTestConfiguration의 사용은 일반적으로 JUnit Jupiter에서의 @Nested 테스트 클래스와 함께 사용할 때만 의미가 있습니다.<br>그러나 Spring과 nested 테스트 클래스를 지원하고 이 어노테이션을 사용하는 다른 테스트 프레임워크가 있을 수 있습니다. |
예제 및 자세한 내용은 @Nested 테스트 클래스 설정을 참조하십시오.
@EnabledIf@EnabledIf는 주어진 expression이 true로 평가될 경우, 어노테이션이 적용된 JUnit Jupiter 테스트 클래스 또는 테스트 메서드가 활성 상태이며 실행되어야 함을 나타내는 데 사용됩니다.
구체적으로, expression이 Boolean.TRUE 또는 true와 같은 String(대소문자 무시)으로 평가되면 테스트는 활성화됩니다. 클래스 수준에서 적용되면, 해당 클래스 내의 모든 테스트 메서드도 기본적으로 자동으로 활성화됩니다.
expression은 다음 중 하나가 될 수 있습니다:
@EnabledIf("#{systemProperties['os.name'].toLowerCase().contains('mac')}")Environment에서 사용 가능한 프로퍼티에 대한 플레이스홀더.
예: @EnabledIf("${smoke.tests.enabled}")@EnabledIf("true")그러나 프로퍼티 플레이스홀더의 동적 해석 결과가 아닌 텍스트 리터럴은 실질적인 가치가 전혀 없습니다. 왜냐하면 @EnabledIf("false")는
@Disabled와 동일하고, @EnabledIf("true")는 논리적으로 의미가 없기 때문입니다.
@EnabledIf를 메타 어노테이션으로 사용하여 커스텀 합성 어노테이션을 만들 수 있습니다. 예를 들어, 다음과 같이 커스텀 @EnabledOnMac 어노테이션을 만들 수 있습니다:
1@Target({ElementType.TYPE, ElementType.METHOD}) 2@Retention(RetentionPolicy.RUNTIME) 3@EnabledIf( 4 expression = "#{systemProperties['os.name'].toLowerCase().contains('mac')}", 5 reason = "Enabled on Mac OS" 6) 7public @interface EnabledOnMac {} 8// Copied!
1@Target(AnnotationTarget.TYPE, AnnotationTarget.FUNCTION) 2@Retention(AnnotationRetention.RUNTIME) 3@EnabledIf( 4 expression = "#{systemProperties['os.name'].toLowerCase().contains('mac')}", 5 reason = "Enabled on Mac OS" 6) 7annotation class EnabledOnMac {} 8// Copied!
@EnabledOnMac은 가능한 것에 대한 예시일 뿐입니다. 정확히 같은 use case를 가지고 있다면,<br>JUnit Jupiter의 built-in @EnabledOnOs(MAC) 지원을 사용하십시오. |
JUnit 5.7부터 JUnit Jupiter에도 @EnabledIf라는 이름의 condition 어노테이션이 있습니다. 따라서,<br>Spring의 @EnabledIf 지원을 사용하려면 올바른 패키지에서 어노테이션 타입을 import했는지<br>확인하십시오. |
@DisabledIf@DisabledIf는 주어진 expression이 true로 평가될 경우, 어노테이션이 적용된 JUnit Jupiter 테스트 클래스 또는 테스트
메서드가 비활성 상태이며 실행되지 않아야 함을 나타내는 데 사용됩니다.
구체적으로, expression이 Boolean.TRUE 또는 true와 같은 String(대소문자 무시)으로 평가되면 테스트는 비활성화됩니다. 클래스 수준에서 적용되면, 해당 클래스 내의 모든 테스트 메서드도 자동으로 비활성화됩니다.
expression은 다음 중 하나가 될 수 있습니다:
@DisabledIf("#{systemProperties['os.name'].toLowerCase().contains('mac')}")Environment에서 사용 가능한 프로퍼티에 대한 플레이스홀더.
예: @DisabledIf("${smoke.tests.disabled}")@DisabledIf("true")그러나 프로퍼티 플레이스홀더의 동적 해석 결과가 아닌 텍스트 리터럴은 실질적인 가치가 전혀 없습니다. 왜냐하면 @DisabledIf("true")는
@Disabled와 동일하고, @DisabledIf("false")는 논리적으로 의미가 없기 때문입니다.
@DisabledIf를 메타 어노테이션으로 사용하여 커스텀 합성 어노테이션을 만들 수 있습니다. 예를 들어, 다음과 같이 커스텀 @DisabledOnMac 어노테이션을 만들 수 있습니다:
1@Target({ElementType.TYPE, ElementType.METHOD}) 2@Retention(RetentionPolicy.RUNTIME) 3@DisabledIf( 4 expression = "#{systemProperties['os.name'].toLowerCase().contains('mac')}", 5 reason = "Disabled on Mac OS" 6) 7public @interface DisabledOnMac {} 8// Copied!
1@Target(AnnotationTarget.TYPE, AnnotationTarget.FUNCTION) 2@Retention(AnnotationRetention.RUNTIME) 3@DisabledIf( 4 expression = "#{systemProperties['os.name'].toLowerCase().contains('mac')}", 5 reason = "Disabled on Mac OS" 6) 7annotation class DisabledOnMac {} 8// Copied!
@DisabledOnMac은 가능한 것에 대한 예시일 뿐입니다. 정확히 같은 use case를 가지고 있다면,<br>JUnit Jupiter의 built-in @DisabledOnOs(MAC) 지원을 사용하십시오. |
JUnit 5.7부터 JUnit Jupiter에도 @DisabledIf라는 이름의 condition 어노테이션이 있습니다. 따라서,<br>Spring의 @DisabledIf 지원을 사용하려면 올바른 패키지에서 어노테이션 타입을 import했는지<br>확인하십시오. |
Spring JUnit 4 Testing Annotations
Meta-Annotation Support for Testing