Loading...
Spring Framework Reference Documentation 7.0.2의 Meta-Annotation Support for Testing의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
대부분의 test 관련 어노테이션을 meta-annotations으로 사용하여 custom composed 어노테이션을 생성하고 test suite 전반에 걸쳐 설정 중복을 줄일 수 있습니다.
예를 들어, 다음 각각을 TestContext framework와 함께 meta-annotation으로 사용할 수 있습니다.
@BootstrapWith@ContextConfiguration@ContextHierarchy@ContextCustomizerFactories@ActiveProfiles@TestPropertySource@DirtiesContext@WebAppConfiguration@TestExecutionListeners@Transactional@BeforeTransaction@AfterTransaction@Commit@Rollback@Sql@SqlConfig@SqlMergeMode@SqlGroup@Repeat (only supported on JUnit 4)@Timed (only supported on JUnit 4)@IfProfileValue (only supported on JUnit 4)@ProfileValueSourceConfiguration (only supported on JUnit 4)@SpringJUnitConfig (only supported on JUnit Jupiter)@SpringJUnitWebConfig (only supported on JUnit Jupiter)@TestConstructor (only supported on JUnit Jupiter)@NestedTestConfiguration (only supported on JUnit Jupiter)@EnabledIf (only supported on JUnit Jupiter)@DisabledIf (only supported on JUnit Jupiter)다음은 JUnit Jupiter와 함께 SpringExtension을 사용하는 test 클래스들입니다:
1@ExtendWith(SpringExtension.class) 2@ContextConfiguration(classes = {AppConfig.class, TestDataAccessConfig.class}) 3@ActiveProfiles("dev") 4@Transactional 5class OrderRepositoryTests { } 6 7@ExtendWith(SpringExtension.class) 8@ContextConfiguration(classes = {AppConfig.class, TestDataAccessConfig.class}) 9@ActiveProfiles("dev") 10@Transactional 11class UserRepositoryTests { }
1@ExtendWith(SpringExtension::class) 2@ContextConfiguration(classes = [AppConfig::class, TestDataAccessConfig::class]) 3@ActiveProfiles("dev") 4@Transactional 5class OrderRepositoryTests { } 6 7@ExtendWith(SpringExtension::class) 8@ContextConfiguration(classes = [AppConfig::class, TestDataAccessConfig::class]) 9@ActiveProfiles("dev") 10@Transactional 11class UserRepositoryTests { }
위의 설정을 test suite 전반에 걸쳐 반복하고 있다는 것을 발견하면, 다음과 같이 Spring과 JUnit Jupiter에 대한 공통 test 설정을 중앙집중화하는 custom composed 어노테이션을 도입하여 중복을 줄일 수 있습니다:
1@Target(ElementType.TYPE) 2@Retention(RetentionPolicy.RUNTIME) 3@ExtendWith(SpringExtension.class) 4@ContextConfiguration(classes = {AppConfig.class, TestDataAccessConfig.class}) 5@ActiveProfiles("dev") 6@Transactional 7public @interface TransactionalDevTestConfig { }
1@Target(AnnotationTarget.TYPE) 2@Retention(AnnotationRetention.RUNTIME) 3@ExtendWith(SpringExtension::class) 4@ContextConfiguration(classes = [AppConfig::class, TestDataAccessConfig::class]) 5@ActiveProfiles("dev") 6@Transactional 7annotation class TransactionalDevTestConfig { }
그런 다음 custom @TransactionalDevTestConfig 어노테이션을 사용하여 다음과 같이
개별 JUnit Jupiter 기반 test 클래스의 설정을 단순화할 수 있습니다:
1@TransactionalDevTestConfig 2class OrderRepositoryTests { } 3 4@TransactionalDevTestConfig 5class UserRepositoryTests { }
1@TransactionalDevTestConfig 2class OrderRepositoryTests { } 3 4@TransactionalDevTestConfig 5class UserRepositoryTests { }
JUnit Jupiter는 @Test, @RepeatedTest, ParameterizedTest 등의 meta-annotation 사용을
지원하므로, test 메서드 수준에서도 custom composed 어노테이션을 생성할 수 있습니다.
예를 들어, JUnit Jupiter의 @Test와 @Tag 어노테이션을 Spring의 @Transactional
어노테이션과 결합한 composed 어노테이션을 생성하려는 경우,
다음과 같이 @TransactionalIntegrationTest 어노테이션을 생성할 수 있습니다:
1@Target(ElementType.METHOD) 2@Retention(RetentionPolicy.RUNTIME) 3@Transactional 4@Tag("integration-test") // org.junit.jupiter.api.Tag 5@Test // org.junit.jupiter.api.Test 6public @interface TransactionalIntegrationTest { }
1@Target(AnnotationTarget.TYPE) 2@Retention(AnnotationRetention.RUNTIME) 3@Transactional 4@Tag("integration-test") // org.junit.jupiter.api.Tag 5@Test // org.junit.jupiter.api.Test 6annotation class TransactionalIntegrationTest { }
그런 다음 custom @TransactionalIntegrationTest 어노테이션을 사용하여
다음과 같이 개별 JUnit Jupiter 기반 test 메서드의 설정을 단순화할 수 있습니다:
1@TransactionalIntegrationTest 2void saveOrder() { } 3 4@TransactionalIntegrationTest 5void deleteOrder() { }
1@TransactionalIntegrationTest 2fun saveOrder() { } 3 4@TransactionalIntegrationTest 5fun deleteOrder() { }
자세한 내용은 Spring Annotation Programming Model wiki 페이지를 참조하십시오.
Spring JUnit Jupiter Testing Annotations
Further Resources