在测试中使用Spring的ResourceLoader

jlb*_*jlb 3 java testing spring

我在@Autowire荷兰国际集团一org.springframework.core.io.ResourceLoader进入我的一个@Service班。

在测试期间,我想访问的实例ResourceLoader,以便可以将其注入到要测试的服务中。ResourceLoader在测试期间获取功能齐全的实例的最佳方法是什么?

如果那不可能,是否有替代方法ResourceLoader?本质上,我需要让我的服务从项目中读取一些静态文件。

更新

开始在测试中使用@RunWith(SpringJUnit4ClassRunner.class)+ @ContextConfiguration;但是,ResourceLoader现在通过@Autowire我的服务注入的行为与通常的行为有所不同(即,不在测试环境中时)。在测试中,ResourceLoader#getResource返回的Resource指向错误的相对路径,而不是在常规执行期间出现的正确的绝对路径。

调试时发现了更多信息:

  • 在测试期间,@ Autowired resourceLoader是一个instanceoforg.springframework.context.support.GenericApplicationContext
  • 在常规执行期间,resourceLoaderorg.springframework.web.context.support.XmlWebApplicationContext

Are*_*rff 5

您可以使用DefaultResourceLoader。它处理URL和类路径资源,这些资源对于简单测试应该足够了。

DefaultResourceLoader不需要任何特殊设置。只需创建一个新实例并将其传递给您的测试即可。


zag*_*gyi 3

你想写什么样的测试?

如果它是单元测试,您可能应该模拟ResourceLoader并将该模拟注入到服务实例中。(例如使用mockito)

如果是集成测试,最好使用Spring TestContext框架。创建一个包含测试所需的所有组件的 spring 上下文,然后用@RunWith(SpringJUnit4ClassRunner.class)+注释您的测试类 @ContextConfiguration,这将使得在测试类中自动装配完全配置的 bean(例如要测试的服务实例)成为可能。