java - 如何在单个注解中组合多个 Spring 测试注解?

标签 java junit annotations spring-boot

我在我的测试类上使用 Spring Boot 方便的注释来进行集成测试。

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Config.class)
@IntegrationTest
@Sql({"classpath:rollback.sql", "classpath:create-tables.sql"})
@Transactional

我发现在每个测试类上复制/粘贴整个 block 非常难看,所以我创建了自己的 @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

我想现在没问题,但是有没有办法组合这些注释,这样我就可以使用单个注释了?

最佳答案

元注释不是代码重用的唯一方式。我们改用继承:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Config.class)
@IntegrationTest
@Sql({"classpath:rollback.sql", "classpath:create-tables.sql"})
@Transactional
public abstract class IntegrationTest {
}

public class FooTest extends IntegrationTest {

}

public class BarTest extends IntegrationTest {

}

与元注解不同,Spring 和 JUnit 都能理解从基类继承的注解。

关于java - 如何在单个注解中组合多个 Spring 测试注解?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31098138/

相关文章:

java - 最终实例变量的安全发布是否可传递给非最终二级引用?

java - 为什么 Beanshell 会阻塞源文件中的 '@' 字符?

java - 为什么我的 cucumber 测试用例被跳过?

Hibernate Annotations - 如何从映射中排除 bean 字段?

java - 具有空的 Autowiring 依赖项的 Spring Boot JavaConfig

java检查值

java - JavaFX 中何时隐藏舞台,如何获取?

java - ListView 中的 CardView

java - 模拟 BindingProvider 和生成的 stub 类时出现问题

java - 用于验证独特元素的自定义注释