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指向错误的相对路径,而不是在常规执行期间出现的正确的绝对路径。
调试时发现了更多信息:
resourceLoader
是一个instanceoforg.springframework.context.support.GenericApplicationContext
resourceLoader
是org.springframework.web.context.support.XmlWebApplicationContext
您可以使用DefaultResourceLoader。它处理URL和类路径资源,这些资源对于简单测试应该足够了。
DefaultResourceLoader不需要任何特殊设置。只需创建一个新实例并将其传递给您的测试即可。
你想写什么样的测试?
如果它是单元测试,您可能应该模拟ResourceLoader
并将该模拟注入到服务实例中。(例如使用mockito)
如果是集成测试,最好使用Spring TestContext框架。创建一个包含测试所需的所有组件的 spring 上下文,然后用@RunWith(SpringJUnit4ClassRunner.class)
+注释您的测试类
@ContextConfiguration
,这将使得在测试类中自动装配完全配置的 bean(例如要测试的服务实例)成为可能。
归档时间: |
|
查看次数: |
8972 次 |
最近记录: |