2010-05-19 160 views
1

我第一次使用Spring並且必須做錯某事。我有一個項目有幾個Bean實現,現在我試圖用Spring Test和JUnit創建一個測試類。我正在嘗試使用Spring Test將自定義的bean注入到測試類中。Spring Test/JUnit問題 - 無法加載應用程序上下文

這是我測試的applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="............."> 
    <bean 
    id="MyUuidFactory" 
     class="com.myapp.UuidFactory" 
     scope="singleton" > 
    <property name="typeIdentifier" value="CLS" /> 
    </bean> 

    <bean id="ThingyImplTest" 
     class="com.myapp.ThingyImplTest" 
      scope="singleton"> 
    <property name="uuidFactory"> 
     <idref local="MyUuidFactory" /> 
    </property> 
</bean> 
</beans> 

MyUuidFactory實例的注射用下面的代碼一起去從測試類中:

private UuidFactory uuidFactory; 

public void setUuidFactory(UuidFactory uuidFactory) { 
    this.uuidFactory = uuidFactory; 
} 

然而,當我去運行測試(在Eclipse或命令行中)我得到以下錯誤(爲簡潔起見省略了堆棧跟蹤):

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'MyImplTest' defined in class path resource [test-applicationContext.xml]: 
Initialization of bean failed; nested exception is org.springframework.beans.ConversionNotSupportedException: 
Failed to convert property value of type 'java.lang.String' to required type 'com.myapp.UuidFactory' for property 'uuidFactory'; 
nested exception is java.lang.IllegalStateException: 
Cannot convert value of type [java.lang.String] to required type [com.myapp.UuidFactory] for property 'uuidFactory': 
no matching editors or conversion strategy found 

有趣的是,Eclipse/Spring XML編輯器顯示我拼錯任何類型或idrefs的錯誤。如果我離開這個bean,但註釋掉依賴注入,那麼所有東西都會工作,直到運行測試時出現NullPointerException ...這是有道理的。

回答

3

嘗試<ref/>而不是<idref/>。 「

」idref元素僅僅是將容器中另一個bean的id傳遞給<constructor-arg/><property/>元素的一種防錯方法。「

+0

這已經超過了'無法創建應用程序上下文'的錯誤,但在測試中降落了一個NullPointerException。看起來像Spring沒有注入依賴。 – HDave 2010-05-19 13:57:27

+0

我需要將「@Resource」註釋放在測試類的字段中。用「ref」代替「idref」解決了這個問題。作爲一名新的Spring開發人員,我不得不說在這一點上的文檔非常糟糕。這聽起來像idref更像是一種引用bean的「類型安全」方式,而實際上它是引用bean的字符串名稱的一種方式。很混亂.... – HDave 2010-05-19 14:52:42

相關問題