现在,我们已经在 CDPlaye r的构造器中添加了 @Autowired 注解, Spring 将把一个可分配给 CompactDisc 类型的 bean 自动注入进来。为了验证这一点,让我们修改一下 CDPlayerTest,使其能够借助 CDPlayer bean 播放 CD:
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() 方法的输出被发送到了控制台上。