跳到主要内容
版本:7.0.3

测试的元注释支持

Hunyuan 7b 中英对照 Meta-Annotation Support for Testing

你可以将大多数与测试相关的注解作为元注解来使用,从而创建自定义的复合注解,并减少整个测试套件中的配置重复。

例如,你可以将以下每一项与TestContext框架结合使用作为元注释。

  • @BootstrapWith

  • @ContextConfiguration

  • @ContextHierarchy

  • @ContextCustomizerFactories

  • @ActiveProfiles

  • @TestPropertySource

  • @DirtiesContext

  • @WebAppConfiguration

  • @TestExecutionListeners

  • @Transactional

  • @BeforeTransaction

  • @AfterTransaction

  • @Commit

  • @Rollback

  • @Sql

  • @SqlConfig

  • @SqlMergeMode

  • @SqlGroup

  • @Repeat (仅支持JUnit 4)

  • @Timed (仅支持JUnit 4)

  • @IfProfileValue (仅支持JUnit 4)

  • @ProfileValueSourceConfiguration (仅支持JUnit 4)

  • @SpringJUnitConfig (仅支持JUnit Jupiter)

  • @SpringJUnitWebConfig (仅支持JUnit Jupiter)

  • @TestConstructor (仅支持JUnit Jupiter)

  • @NestedTestConfiguration (仅支持JUnit Jupiter)

  • @EnabledIf (仅支持JUnit Jupiter)

  • @DisabledIf (仅支持JUnit Jupiter)

考虑以下使用SpringExtension与JUnit Jupiter的测试类:

@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = {AppConfig.class, TestDataAccessConfig.class})
@ActiveProfiles("dev")
@Transactional
class OrderRepositoryTests { }

@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = {AppConfig.class, TestDataAccessConfig.class})
@ActiveProfiles("dev")
@Transactional
class UserRepositoryTests { }

如果我们发现我们在整个测试套件中重复使用之前的配置,那么可以通过引入一个自定义的复合注释来减少这种重复,该注释可以集中管理Spring和JUnit Jupiter的通用测试配置,具体如下:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = {AppConfig.class, TestDataAccessConfig.class})
@ActiveProfiles("dev")
@Transactional
public @interface TransactionalDevTestConfig { }

然后我们可以使用我们自定义的@TransactionalDevTestConfig注解来简化基于JUnit Jupiter的各个测试类的配置,如下所示:

@TransactionalDevTestConfig
class OrderRepositoryTests { }

@TransactionalDevTestConfig
class UserRepositoryTests { }

由于JUnit Jupiter支持使用@Test@RepeatedTestParameterizedTest等元注解,你也可以在测试方法级别创建自定义的复合注解。例如,如果我们希望创建一个结合了JUnit Jupiter中的@Test@Tag注解以及Spring中的@Transactional注解的复合注解,我们可以创建一个@TransactionalIntegrationTest注解,如下所示:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Transactional
@Tag("integration-test") // org.junit.jupiter.api.Tag
@Test // org.junit.jupiter.api.Test
public @interface TransactionalIntegrationTest { }

然后我们可以使用我们自定义的@TransactionalIntegrationTest注解来简化基于JUnit Jupiter的各个测试方法的配置,如下所示:

@TransactionalIntegrationTest
void saveOrder() { }

@TransactionalIntegrationTest
void deleteOrder() { }

有关更多详细信息,请参阅Spring注解编程模型维基页面。