2.2.5 验证自动装配

现在,我们已经在 CDPlaye r的构造器中添加了 @Autowired 注解, Spring 将把一个可分配给 CompactDisc 类型的 bean 自动注入进来。为了验证这一点,让我们修改一下 CDPlayerTest,使其能够借助 CDPlayer bean 播放 CD:

CDPlayerTest.java
package soundsystem;

import static org.junit.Assert.*;

import org.junit.Rule;
import org.junit.Test;
import org.junit.contrib.java.lang.system.StandardOutputStreamLog;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=CDPlayerConfig.class)
public class CDPlayerTest {

  @Rule
  public final StandardOutputStreamLog log = new StandardOutputStreamLog();

  @Autowired
  private MediaPlayer player;
  
  @Autowired
  private CompactDisc cd;
  
  @Test
  public void cdShouldNotBeNull() {
    assertNotNull(cd);
  }

  @Test
  public void play() {
    player.play();
    assertEquals(
        "Playing Sgt. Pepper's Lonely Hearts Club Band by The Beatles\n", 
        log.getLog());
  }

}

现在,除了注入 CompactDisc,我们还将 CDPlayerbean 注入到测试代码的 player 成员变量之中(它是更为通用的 MediaPlayer 类 型)。在 play() 测试方法中,我们可以调用 CDPlayer 的 play() 方法,并断言它的行为与你的预期一致。

在测试代码中使用 System.out.println() 是稍微有点棘手的事情。因此,该样例中使用了 StandardOutputStreamLog,这是来源于 System Rules 库 的一个 JUnit 规则,该规则能够基于控制台的输出编写断言。在这里,我们断言 SgtPeppers.play() 方法的输出被发送到了控制台上。

现在,你已经了解了组件扫描和自动装配的基础知识,在第 3 章中,当我们介绍如何处理自动装配的歧义性时,还会继续研究组件扫描。

但是现在,我们先将组件扫描和自动装配放在一边,看一下在 Spring 中如何显式地装配 bean,首先从通过 Java 代码编写配置开始。

Last updated