假设我有一个父测试类,如下所示:
@ContextConfiguration(loader = AnnotationConfigContextLoader.class, classes = { MyCustomTestConfig.class })
public class MyParentTestclass {
然后我有一个子类,我想在其中添加Spring 3.2.3 name annotation attribute。
@ContextConfiguration(name=MyName)
public class MyChildTestClass extends MyParentTestClass {
我仍然想从父级获取所有上下文配置-但不确定是否会通过。
我的问题是:在 Spring ,ContextConfiguration(...)是否从其父@ContextConfiguration继承?
最佳答案
@ContextConfiguration
不支持开箱即用的继承。@ContextConfiguration
具有一个名为inheritLocations
的属性,该属性默认为true
并指示是否应继承测试超类的资源位置或带注释的类。
InheritLocations = true :这意味着带注释的类将继承测试超类定义的资源位置或带注释的类。具体来说,给定测试类的资源位置或带注释的类将附加到由测试超类定义的资源位置或带注释的类的列表中。因此,子类可以选择扩展资源位置列表或带注释的类。
如果将InheritLocations设置为false,则带注释的类的资源位置或带注释的类将隐藏并有效替换超类定义的任何资源位置或带注释的类。
在以下使用带注释的类的示例中,将从BaseConfig和ExtendedConfig配置类中按此顺序加载ExtendedTest的ApplicationContext。因此,在ExtendedConfig中定义的Bean可能会覆盖在BaseConfig中定义的Bean。
@ContextConfiguration(classes=BaseConfig.class)
public class BaseTest {
// ...
}
@ContextConfiguration(classes=ExtendedConfig.class)
public class ExtendedTest extends BaseTest {
// ...
}