Spring 为什么我的bean是空的?

Spring 为什么我的bean是空的?,spring,dependency-injection,javabeans,spring-test,Spring,Dependency Injection,Javabeans,Spring Test,我正在努力学习如何使用applicationContext。我的目标是在使用单元测试时,将模拟数据存储库替换为真实数据存储库。我不想显式地做这件事,我想用依赖注入来做这件事 因此,作为使事情复杂化之前的一个简单测试,我只是尝试从applicationContext.xml中获取一个bean。据我所知,这应该是可行的: @ContextConfiguration(locations = "/applicationContext.xml") public class ResultsListTests

我正在努力学习如何使用applicationContext。我的目标是在使用单元测试时,将模拟数据存储库替换为真实数据存储库。我不想显式地做这件事,我想用依赖注入来做这件事

因此,作为使事情复杂化之前的一个简单测试,我只是尝试从applicationContext.xml中获取一个bean。据我所知,这应该是可行的:

@ContextConfiguration(locations = "/applicationContext.xml")
public class ResultsListTests {

     @Resource
     CompanyResult resultBean;

     @Test
     public void shouldAddResults() {
         assertEquals(resultBean.getCompanyName(), "Microsoft");
但是我的resultBean总是空的。这是我的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总是空的呢?我做错了什么?

您缺少一个
@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应用程序)


有关详细信息,请参阅。

谢谢您的回复。两个问题。1) 无法将SpringJUnit4ClassRunner解析为类型。怎么回事?2) 虽然知道applicationContext.xml位于错误的位置是有帮助的,但知道放置它的正确位置会更有帮助(“类路径的根”对我来说意义不大,因为我对Spring和Java非常陌生)。我已经阅读了BeanFactory和ApplicationContext的章节,显然他们希望您知道它的发展方向。您使用的是哪个版本的Spring?你的项目是如何组织的(源文件夹布局)?我使用的是3.0.5。我的Java资源包含一个src文件夹和几个测试文件夹。我的src文件夹只有包。我被告知应该在Java资源下添加一个resources文件夹,并将applicationContext.xml放在其中,然后我可以用WEB-INF/classes/applicationContext.xml引用它。我不清楚Java资源/资源如何映射到WEB-INF/类,但这不是我第一次因为Java在文件夹结构方面坚持使用烟雾和镜像而感到沮丧。在任何情况下,你同意这一点还是有不同的建议?我不确定我以前做错了什么,但我的@RunWith注释现在工作正常,我的applicationContext正在加载。谢谢你的提示!