NullPointerException:Junit Spring注释配置

时间:2018-06-08 21:50:16

标签: java spring dependency-injection nullpointerexception

我正在学习Spring框架和using this reference

我有UkranianSongs

import javax.annotation.Nonnull;

public class UkrainianSongs implements CompactDisk{
    @Override
    @Nonnull
    public String getTitle(){
        return "Ukranian Songs";
    }

    @Override
    @Nonnull
    public String getArtist(){
        return "Skriabin";
    }
}

我正在CDPlayerConfig

中创建一个bean
@Configuration
@ComponentScan
public class CDPlayerConfig {

    @Bean
    public CompactDisk anUkranianDisk(){
        return  new UkrainianSongs();
    }
}

我正在另一个类

中自动装配光盘类
@Component
public class CompactDiskBox {

    @Autowired
    public CompactDisk anUkrainianDisk;
} 

我写了一个JUnit测试,我试图断言anUkranianDisk bean被正确初始化并且不是null

@RunWith(JUnit4.class)
@ContextConfiguration(classes = CDPlayerConfig.class)
public class CompactDiskBoxTest {
    @Autowired(required = true)
    public CompactDiskBox compactDiskBox;

    @Test
    public void testUkranianDisk(){
        assertNotNull(compactDiskBox.anUkrainianDisk);
    }
} 

这会抛出一个NullPointerException,因为compactDiskBox为null,这意味着它无法正确初始化bean。我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:4)

为了能够在单元/集成测试中使用依赖注入,您必须设置Spring TestContext Framework。为此,您应该使用SpringJUnit4ClassRunner.classSpringRunner.class运行测试。 SpringRunner.class只是SpringJUnit4ClassRunner.class的别名。