Java 如何创建和使用具有Spring+;JUnit测试配置注释?

Java 如何创建和使用具有Spring+;JUnit测试配置注释?,java,spring,junit,annotations,Java,Spring,Junit,Annotations,我有大量使用SpringJUnit支持运行的测试用例,每个测试上都有以下注释 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations="classpath:spring/applicationContext.xml") @TransactionConfiguration(transactionManager="transactionManager") @Transactional @ActiveProfile

我有大量使用SpringJUnit支持运行的测试用例,每个测试上都有以下注释

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:spring/applicationContext.xml")
@TransactionConfiguration(transactionManager="transactionManager")
@Transactional
@ActiveProfiles("test")
我想创建一个自定义注释并使用它,而不是将所有这些注释放在每个测试类上

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:spring/applicationContext.xml")
@TransactionConfiguration(transactionManager="transactionManager")
@Transactional
@ActiveProfiles("test")

@Target({ ElementType.FIELD, ElementType.PARAMETER, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface SpringJUnit4TestConfig {

}
但是当我使用这个自定义注释时,Spring注入根本没有发生

@SpringJUnit4TestConfig
public class UserServiceTest
{
}
我错过了什么

附言:
但是JUnit的@RunWith和Spring的@Transactional、@ContextConfiguration都是@Inherited.。所以我认为它应该可以工作。但现在我是通过一次工作来度过的。创建了一个基于的抽象类,并将所有这些注释放在它上面,以及扩展该基类的测试用例。

我认为这种方法不起作用,因为
@RunWith
是JUnit注释,所以要使它起作用,JUnit注释必须是可传递的

当一个类用@RunWith注释或扩展一个用@RunWith注释的类时,JUnit将调用它引用的类来运行该类中的测试,而不是JUnit中内置的运行程序。我们在开发后期添加了此功能。虽然它看起来很强大,但我们希望runner API随着我们了解人们如何真正使用它而改变。当前内部的一些类可能会被细化并公开

因此,测试JUnit测试调用似乎只适用于继承的类

至于Spring,它支持一种叫做配置位置的东西,我不确定这是否适用于其他注释类型(如果您不这么认为,请指向文档),在测试配置类继承的情况下,这可能适用于其他注释,因为对于这种情况,
@Transactional
注释本身是用
@Inherited
声明的


因此,在本例中,它不会运行,因为缺少JUnit注释

我应该只使用@Target({ElementType.TYPE}),我不认为你会在字段或参数中使用它,或者你会吗?你是对的。这个自定义注释应该只应用于ElementType.TYPE。我也希望这样做。通过阅读问答,我创建了一个注释,该注释使用了除
@RunWith
之外的所有配置,到目前为止似乎运行良好。我在每个测试用例类上使用
@RunWith(SpringJUnit4ClassRunner.class)