我延长了通用XmlContextLoader
public class MyContextLoader extends GenericXmlContextLoader {
并重写
protected String[] generateDefaultLocations(Class<?> clazz)
方法来收集我可以通过 SystemProperty (-Dtest.config=) 指定的目录的配置文件名。
我还修改了以下方法以不修改任何位置
@Override
protected String[] modifyLocations(Class<?> clazz, String... locations) {
return locations;
}
我像这样使用这个上下文加载器
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader = MyContextLoader.class)
public class Test { .... }
使用指示配置文件来源的 SystemProperty 运行测试使您现在可以使用完全不同的配置。
当然,使用 SystemProperty 只是指定配置位置的一种策略。你可以在里面做任何你想做的事generateDefaultLocations()
.
EDIT:
该解决方案使您能够使用完全不同的应用程序上下文配置(例如,对于模拟对象),而不仅仅是不同的属性。您不需要构建步骤即可将所有内容部署到“类路径”位置。如果没有给出系统属性,我的具体实现还使用用户名作为默认值来查找配置目录(src/test/resources/{user})(可以轻松地为项目中的所有开发人员维护特定的测试环境)。
仍然可以并推荐使用 Property Placeholder。
EDIT:
春季版3.1.0将支持XML 配置文件/环境抽象这与我的解决方案类似,并且可以为不同的环境/配置文件选择配置文件。