尝试从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");
}
}
为什么这个测试会给出空指针异常?是否有一些其他配置相关需要为此或其他一些我缺失的步骤完成?
答案 0 :(得分:0)
使用界面很好。 你遇到的问题是因为@Autowired语句是:
@Autowired CacheSampleDaoImpl cacheSampleDaoImpl;
但你的DaoImpl在哪里?您创建的bean是CacheSampleImpl,它实现了CacheSampleDao接口,而不是DaoImpl。
此外,该属性应根据您创建的bean命名,您没有名为cacheSampleDaoImpl的bean或类型为CacheSampleDaoImpl的bean,以便成功解析自动装配。
根据您显示的代码(不包括CacheSampleDaoImpl),我相信您想要的是:
@Autowired CacheSampleDao cacheSampleImpl;
这里有一篇关于如何做到这一点的好文章:
答案 1 :(得分:0)
对于使用spring的集成测试,你应该关心在测试中插入spring上下文,在其他情况下,没有什么可以关心构建和注入bean,这实际上发生在你的测试中。 作为一种解决方案,您可以使用以下注释来注释您的测试:@ContextConfiguration和@RunWith,如下所示:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/your-spring-context.xml")
你可以在春季参考文献中详细介绍春季测试。