我有以下情况:
@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?
我主要关注的是让BasicListener正常工作。
由于
答案 0 :(得分:0)
您遇到的行为是由于核心Spring中的错误:继承的注释会影响本地声明的组合注释。
在您的使用案例中,@TestExecutionListeners
是继承的注释,@AnnotationOne
是本地声明的撰写的注释。
此错误已在Spring Framework 4.2 RC1中修复。有关详细信息,请参阅SPR-12749。
如果您希望在发布4.2之前解决问题,则以下内容应该对您有用,但如果您的班级来自{{1},您将无法使用自定义@AnnotationOne
注释}}:
AbstractJUnit4SpringContextTests
一般来说,@TestExecutionListeners(listeners = BasicListener.class, inheritListeners = false)
public class TestClassOne extends AbstractJUnit4SpringContextTests {
// ...
}
增加的价值非常小。所以你最好采用以下方法:
AbstractJUnit4SpringContextTests
甚至:
@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners(BasicListener.class)
public class TestClassOne {
// ...
}
此致
Sam( Spring TestContext Framework的作者)