从继承的类中禁用Spring TestExecutionListeners
我有以下情况:从继承的类中禁用Spring TestExecutionListeners,spring,junit4,spring-test,Spring,Junit4,Spring Test,我有以下情况: @TestExecutionListeners(BasicListener.class) public @interface AnnotationOne { } @AnnotationOne public class TestClassOne extends AbstractJUnit4SpringContextTests { ... } 由于: @RunWith(SpringJUnit4ClassRunner.class) @TestExecutionListeners({
@TestExecutionListeners(BasicListener.class)
public @interface AnnotationOne {
}
@AnnotationOne
public class TestClassOne extends AbstractJUnit4SpringContextTests {
...
}
由于:
@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners({ServletTestExecutionListener.class, DependencyInjectionTestExecutionListener.class,
DirtiesContextTestExecutionListener.class})
public abstract class AbstractJUnit4SpringContextTests implements ApplicationContextAware {
...
}
由于某些原因,TestExecutionListeners不会被合并。那么,有没有办法禁用父类定义的TestExecutionListeners
我主要关心的是基本的问题
谢谢您正在经历的行为是由于core Spring中的一个bug造成的:继承的注释将对本地声明的组合注释进行阴影处理 在您的用例中,
@TestExecutionListeners
是继承的注释,@AnnotationOne
是本地声明的组合注释
这个错误已经在SpringFramework 4.2RC1中修复。有关详细信息,请参阅
如果您希望在4.2发布之前解决问题,以下内容应该适合您,但是如果您的类从AbstractJUnit4S普林gContextTests
扩展,则您将无法使用自定义的@AnnotationOne
注释:
@TestExecutionListeners(listeners=BasicListener.class,inheritListeners=false)
公共类TestClassOne扩展了AbstractJUnit4SpringContextTests{
// ...
}
一般来说,AbstractJUnit4SpringContextTests
增加的价值很小。因此,您最好采用以下方法:
@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners(BasicListener.class)
公共类TestClassOne{
// ...
}
甚至:
@RunWith(SpringJUnit4ClassRunner.class)
@注释一
公共类TestClassOne{
// ...
}
问候,
Sam(SpringTestContext框架的作者)