【发布时间】:2015-09-14 21:08:32
【问题描述】:
我在我的测试类上使用 Spring Boot 的方便注释,用于集成测试。
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Config.class)
@IntegrationTest
@Sql({"classpath:rollback.sql", "classpath:create-tables.sql"})
@Transactional
我发现在每个测试类上复制/粘贴整个块非常难看,所以我创建了自己的 @MyIntegrationTest 注释
@SpringApplicationConfiguration(classes = Config.class)
@IntegrationTest
@Sql({"classpath:database-scripts/rollback.sql", "classpath:database-scripts/create-tables.sql", "classpath:database-scripts/insert-test-data.sql"})
@Transactional
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(value = RetentionPolicy.RUNTIME)
@interface MyIntegrationTest {
}
但是,如果我在新注释中添加 @RunWith(SpringJUnit4ClassRunner.class),那么 JUnit 将使用其默认运行器运行 - 这是不可取的。
所以现在我必须使用两个注解。
@RunWith(SpringJUnit4ClassRunner.class)
@MyIntegrationTest
我想现在还可以,但是有没有办法组合这些注释,所以我可以使用单个注释?
【问题讨论】:
-
我想这是你能得到的最好的了...docs.spring.io/spring/docs/current/spring-framework-reference/…
-
好的,我已经深入研究了 JUnit 代码。
AnnotatedBuilder类是试图通过注释检测任何 Runner 的类,它们使用:RunWith annotation = currentTestClass.getAnnotation(RunWith.class);,因此它不会获取任何“注释上的注释”。不知道为什么它没有实现,会在他们的 GitHub 上询问这些人。
标签: java junit annotations spring-boot