我有一个分布在多个 Spring bean 定义 xml 文件中的大型应用程序。在我的测试套件中,我使用 FileSystemXmlApplicationContext 手动加载我需要的 XML 文件来执行我想要运行的测试。这减少了测试设置时间,并允许我使用与生产中使用的完全相同的配置文件。
现在我正在尝试使用 Spring 的事务测试基类,它获取配置位置并为我加载上下文。由于某种原因,当创建应用程序上下文时,Spring 找不到任何配置文件。这很令人困惑,因为我从与使用 FileSystemXmlApplicationContext 自己加载配置时相同的工作目录运行测试。如果我在所有配置位置前加上“文件:”,则会找到我在测试中指定的路径,但找不到任何由配置中定义的 bean 导入或引用的文件(例如属性文件)。这是怎么回事?我可以获得扩展弹簧上下文测试类的测试,使其与我自己创建上下文的测试相同吗?
例如,像这样创建上下文可以正常工作:
ApplicationContext ctx = new FileSystemXmlApplicationContext(new String[] { "WEB-INF/services-context.xml"})
如果我扩展 AbstractTransactionalDataSourceSpringContextTests 以下找不到 services-context.xml:
@Override
protected String[] getConfigLocations() {
return new String[] { "WEB-INF/services-context.xml"};
}
这会找到服务上下文,但其中定义的 PropertyPlaceholderConfigurer 无法找到它的属性文件。
@Override
protected String[] getConfigLocations() {
return new String[] { "file:WEB-INF/services-context.xml"};
}