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 ...這是有道理的。
這已經超過了'無法創建應用程序上下文'的錯誤,但在測試中降落了一個NullPointerException。看起來像Spring沒有注入依賴。 – HDave 2010-05-19 13:57:27
我需要將「@Resource」註釋放在測試類的字段中。用「ref」代替「idref」解決了這個問題。作爲一名新的Spring開發人員,我不得不說在這一點上的文檔非常糟糕。這聽起來像idref更像是一種引用bean的「類型安全」方式,而實際上它是引用bean的字符串名稱的一種方式。很混亂.... – HDave 2010-05-19 14:52:42