編輯2:我已經設法「解決」了這個問題......只是刪除Autowired註釋並使用setUp/tearDown配置。所以,爲了補充我的問題,爲什麼沒有自動裝配的註釋工作(類找到路徑)並且它沒有?我在測試環境文件中做錯了什麼?jUnit在spring服務類中:沒有這樣的bean定義
編輯:我要指出,我試圖autowire是一個類實現兩個接口。我看過(論壇帖子),你不能這樣做(所以這可能是我的問題的原因),但沒有設法得到一個實際的,「官方」的答案。 因此,對於我所看到的,我應該「自動裝載」一個參考界面和另一個參考界面,而Spring會奇蹟般地發現我試圖測試這個特定的實現。是對的嗎?如果是這樣,爲什麼?
我正在研究一個有點大的J2EE項目的jUnit測試,在Hibernate上沒有任何經驗。我打算將每個軟件包打包,使用大多數是預配置的文件來進行測試,所以配置的確切細節對我來說有點模糊。但我無法實例化一個定義的類(它被標記爲服務)。
我有這樣的 「被測試」 類:
package com.stackoverflow.business.service.impl;
@service
public class ClassA Implements InterfaceA<BeanA>, BeanB {
/* Actual implementation of the class*/
}
,然後這個,實際測試類,請不要介意無用進口:
package com.stackoverflow.business.service.test;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;
import com.stackoverflow.business.service.impl.ClassA;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {
"classpath:/spring/integration-core-config.xml",
"classpath:/spring/app-custom-persistence-hibernate.xml",
"classpath:/spring/app-test-persistence-hibernate.xml",
"classpath:/spring/app-custom-reporting.xml",
"classpath:/spring/test-context.xml"})
public class ClassATest{
@Autowired
private ClassA classATestInstance;
/* Rest of the implementations*/
}
AFAIK,4個第一個xml文件是測試的標準。測試的context.xml被我加入,在希望春天發現了什麼,我想測試,與下面的配置(它似乎沒有同樣的錯誤這個XML結果運行測試):
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.1.xsd">
<context:component-scan base-package="com.stackoverflow.business.service.impl" />
<bean id="ClassATest" class="com.stackoverflow.business.service.impl"></bean>
</beans>
希望那裏沒有錯別字。方向是正確的,包名是正確的,但是當spring嘗試創建ClassA實例(ClassATestInstance)時,我得到一個BeanCreationException,告訴我它沒有找到ClasA bean。我從來沒有試過用@Service註釋來測試一個類,所以我不確定即使我可以/應該這樣做,但是對於同一個包中的以前的類(儘管沒有註釋),使用test-context.xml文件來定義這個bean工作得很好。
我在這裏錯過了什麼?
編輯:添加異常文本(僅第一線以避免混亂):
org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'com.stackoverflow.business.service.test.ClassATest'
Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException:
Could not autowire field: private com.stackoverflow.business.service.impl.ClassA com.stackoverflow.business.service.test.ClassATest nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.stackoverflow.business.service.impl.ClassA] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
異常,請。 –
這很清楚:沒有匹配的bean。如果它是可行的,嘗試使用構造函數而不是字段注入,然後在普通模擬的本地構造服務對象。 – chrylis
我知道那裏沒有匹配的bean,我想知道的是爲什麼系統告訴我沒有匹配的bean(如果有的話)(路徑和內容是正確的)。做ClassA實例= new ClassA();創建沒有問題的實例。這種情況下有什麼不兼容的「自動裝配」? – Neuromante