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