为什么这个DAO在spring中返回一个空指针

时间:2016-02-15 21:39:10

标签: java spring junit

尝试从junit测试中调用一个非常简单的方法。 我有一个界面和类:

public interface CacheSampleDao {
    String sample(String a);
}

public class CacheSampleImpl implements CacheSampleDao {
    public String sample(String a) {
        return "1";
    }
}

这个类也是我的context.xml中的一个bean

    <bean class="com.premierinc.datascience.repo.CacheSampleImpl"/>

和测试

@Test
public class CacheSampleTest extends AbstractTest {
    @Autowired CacheSampleDaoImpl cacheSampleDaoImpl;
    @Test
    public void cacheTest() {
        String a = cacheSampleDaoImpl.sample("A");
    }
}

为什么这个测试会给出空指针异常?是否有一些其他配置相关需要为此或其他一些我缺失的步骤完成?

2 个答案:

答案 0 :(得分:0)

使用界面很好。 你遇到的问题是因为@Autowired语句是:

 @Autowired CacheSampleDaoImpl cacheSampleDaoImpl;

但你的DaoImpl在哪里?您创建的bean是CacheSampleImpl,它实现了CacheSampleDao接口,而不是DaoImpl。

此外,该属性应根据您创建的bean命名,您没有名为cacheSampleDaoImpl的bean或类型为CacheSampleDaoImpl的bean,以便成功解析自动装配。

根据您显示的代码(不包括CacheSampleDaoImpl),我相信您想要的是:

@Autowired CacheSampleDao cacheSampleImpl;

这里有一篇关于如何做到这一点的好文章:

Spring autowire interface

答案 1 :(得分:0)

对于使用spring的集成测试,你应该关心在测试中插入spring上下文,在其他情况下,没有什么可以关心构建和注入bean,这实际上发生在你的测试中。 作为一种解决方案,您可以使用以下注释来注释您的测试:@ContextConfiguration和@RunWith,如下所示:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/your-spring-context.xml")

你可以在春季参考文献中详细介绍春季测试。