You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

非Spring Boot应用Spock集成测试@Autowired依赖dataUtils为空问题

问题原因分析

你遇到的dataUtils注入为空的核心原因是你手动创建了DataProcesser实例,而非让Spring容器管理该实例:

  • Spring的依赖注入仅对容器内托管的Bean生效。你在测试方法里用new DataProcesser()创建的对象完全脱离了Spring容器管控,容器无法识别这个对象,自然不会为它注入依赖的dataUtils。
  • 你的测试类虽然通过@ContextConfiguration加载了Spring上下文,但既没有把DataProcesser纳入容器管理,也没有从容器中获取该实例来测试。
解决方法

方式一:让Spring托管DataProcesser并注入到测试类(推荐)

修改测试类,通过@Autowired直接注入Spring容器管理的DataProcesser实例:

@RunWith(SpringRunner.class)
@ContextConfiguration(loader = AnnotationConfigContextLoader.class, classes = AppConfig.class)
class DataProcessorTest extends Specification  {

    @Autowired
    DataProcesser dataProcessor // 由Spring容器注入实例

    def 'call importData'() {
        when:
          dataProcessor.importData()
        then:
          assert 2 == 2
    }
}

同时需确保AppConfig中已经通过@Bean注解或组件扫描(如@ComponentScan)将DataProcesser和dataUtils注册为Spring Bean。

方式二:手动触发Spring依赖注入(特殊场景用)

如果必须手动创建实例,可以通过ApplicationContext手动完成注入:

@RunWith(SpringRunner.class)
@ContextConfiguration(loader = AnnotationConfigContextLoader.class, classes = AppConfig.class)
class DataProcessorTest extends Specification  {

    @Autowired
    ApplicationContext context

    def 'call importData'() {
        given:
          DataProcesser dataProcessor = new DataProcesser()
          context.autowireCapableBeanFactory.autowireBean(dataProcessor) // 手动触发注入
        when:
          dataProcessor.importData()
        then:
          assert 2 == 2
    }
}

内容的提问来源于stack exchange,提问作者user19471184

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 22:48:51