我有大量的测试用例,它们运行Spring Junit支持,每个测试都有以下注释。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:spring/applicationContext.xml")
@TransactionConfiguration(transactionManager="transactionManager")
@Transactional
@ActiveProfiles("test")
我没有在每个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 {
}
但是当我使用这个自定义注释弹簧注入时根本没有发生。
@SpringJUnit4TestConfig
public class UserServiceTest
{
}
我在这里缺少什么?
PS: 但是JUnit的@RunWith和Spring的@Transactional,@ ContextConfiguration都有@ Inherited ..所以我认为它应该可行。但是现在我通过一个解决方案来解决这个问题。创建了一个基于抽象的类,并在其上放置了所有这些注释,并扩展了该基类的测试用例。
答案 0 :(得分:2)
我不认为这种方法会起作用,因为@RunWith
是JUnit注释,所以为了工作,JUnit注释必须是可传递的。
当一个类使用@RunWith注释或者扩展一个使用@RunWith注释的类时,JUnit将调用它引用的类来运行该类中的测试而不是内置于JUnit中的运行器。我们在开发后期添加了此功能。虽然它似乎很强大,但我们希望在我们了解人们如何真正使用它时,运行器API会发生变化。目前内部的一些课程可能会被改进并公之于众。
因此测试JUnit测试调用似乎只适用于继承的类。
对于Spring,它支持一个名为context configuration inheritance的配置位置,我不确定这是否适用于其他注释类型(如果您认为不是,请指向我的文档)实际上,在测试配置类继承的情况下,这可能适用于其他注释,因为@Transactional
注释本身在这种情况下用@Inherited
声明。
因此,在这种情况下,由于JUnit注释缺失,它不会运行。