我正在尝试学习如何使用applicationContext。我的目标是在使用单元测试时将模拟数据存储库替换为真实存储库。我不想明确地这样做,我想通过依赖注入来做到这一点。
因此,在我复杂化之前进行一个简单的测试,我只是想从我的applicationContext.xml中获取一个bean。根据我的阅读,这应该有效:
@ContextConfiguration(locations = "/applicationContext.xml")
public class ResultsListTests {
@Resource
CompanyResult resultBean;
@Test
public void shouldAddResults() {
assertEquals(resultBean.getCompanyName(), "Microsoft");
但我的resultBean始终为null。这是我的applicationContext.xml,它位于WebContent / WEB-INF:
下<?xml version="1.0" encoding="UTF-8"?>
<beans>
<bean id="resultBean" name="resultBean" class="com.trgr.cobalt.company.domain.CompanyResult">
<property name="companyName">
<value>Microsoft</value>
</property>
</bean>
</beans>
那么为什么我的resultBean总是为null?我做错了什么?
答案 0 :(得分:1)
您缺少@RunWith(SpringJUnit4ClassRunner.class)
注释:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "/applicationContext.xml")
public class ResultsListTests {
@Resource
CompanyResult resultBean;
@Test
public void shouldAddResults() {
assertEquals(resultBean.getCompanyName(), "Microsoft");
}
}
BTW ,在您的示例中,WebContent/WEB-INF
不是applicationContext.xml
的正确位置。
如果指定@ContextConfiguration(locations = "/applicationContext.xml")
,则Spring将在类路径的根目录中查找applicationContext.xml
,而不是WebContent/WEB-INF
(jUnit是100%不知道这是一个Web应用程序的事实)。
有关详细信息,请参阅Spring reference documentation。