Spring @Autowired 对象为空

标签 spring unit-testing spock

我正在 spock 框架中编写规范类。

    @ContextConfiguration(classes = [MyServiceImplementation.class])
    class MyServiceSpecification extends Specification {

         @Autowired
         private MyService myServiceImplementation

         def "  " {
             //code
         }
    }

MyServiceImplementation 类被注释为@Service。我没有使用 XML 配置。 MyServiceImpl 是接口(interface)的实现:MyService

为什么 Autowiring 对象 myServiceImplementation 为空?

我尝试使用 ComponentScan,但它仍然无法正常工作。

最佳答案

首先,您需要在类路径中同时拥有 spock-corespock-spring。其次,@ContextConfiguration(classes= 采用配置类列表,而不是 bean 类。

@ContextConfiguration(classes = [MyConfig.class])
class MyServiceSpecification extends Specification {

     @Autowired
     private MyService myServiceImplementation

     def "  " {
         //code
     }
}

// You could also define @ComponentScan here
class MyConfig {
    @Bean
    MyService myService() {
      return new MyServiceImplementation();
    }
}

关于Spring @Autowired 对象为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46281022/

相关文章:

unit-testing - 如何列出可用的测试类别

unit-testing - Groovy:验证 stub URL 的构造

java - 如何通过 Kotlin Gradle 和 -D 为我的测试提供系统属性

webdriver - 使用 Spock 在 Geb 中单击按钮时出现奇怪的问题

java - Spock Mock 与 Guava Collection

java - 不可变构造函数注入(inject) Kotlin 类的正确方法

java - Tomcat 上的简单 Java Web 应用程序

java - @Transactional 不适用于 AspectJ

java - 从 azure 登录获取 token

reactjs - 用于脚本加载的模拟实用程序函数