【问题标题】:Integration test: test the Autowired annotation集成测试:测试 Autowired 注解
【发布时间】:2013-03-25 22:55:22
【问题描述】:

我想在 spring 中测试注入依赖。

我有一个班级:

 public SomeClass {
   @Autowired
   SomeBean bean ;
   public SomeBean getBean(){
     return this.bean ;
   }
 }

我想要这样的测试:

public SomeClassTest {
  SomeClass someClass ;
  @Before
  public void setUp(){
    someClass = new SomeClass() ;
  }                              
  @Test public testBeanWired(){
    assertNotNull(someClass.getBean()) ;                                                  
  }                          
}

我已经尝试使用带有测试配置文件的 ContextConfiguration,但是测试失败了,我不想在测试中使用 @Autowired,我想创建我的类的一个实例,并且 bean 会自动自动装配。

【问题讨论】:

    标签: spring testing dependency-injection autowired


    【解决方案1】:

    这只有在 bean 使用 @Configuration 注释并且字节码被检测时才有可能。否则,只有 Spring 创建的 bean 是自动装配的。不是使用 new 创建的 bean。因为 Spring 无法知道您创建了一个对象,并且它必须在其中注入一个依赖项。

    这是依赖注入的一个基本原则:对象由容器实例化和注入,而不是你。

    【讨论】:

    • 这就是我想要测试的,容器是否在发挥作用?我有一个用于我的测试的上下文配置文件,其中声明了 bean,我希望在实例化我的类时,在测试中注入要注入的 bean..
    • 容器的工作是自动装配容器实例化的 bean。您正在测试它是否自动装配您实例化的 bean。所以测试会失败。不是因为容器没有完成它的工作,而是因为您使用 new 而不是从 Spring 上下文中获取 bean 实例。
    • mmmmm 对,所以我只需标记@Autowired SomeClass someClass,测试就会通过,是的,它通过了。
    猜你喜欢
    • 2012-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-17
    • 1970-01-01
    • 2021-06-26
    • 2016-03-30
    • 1970-01-01
    相关资源
    最近更新 更多