2011-05-24 72 views
1

我想寫我的DAO類單元測試,但事情是我得到這個錯誤:春3單元測試

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.yeah.server.dao.UserDAOTest': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.yeah.server.dao.UserDAO com.yeah.server.dao.UserDAOTest.userDAO; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.yeah.server.dao.UserDAO] 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)} 

這是我的applicationContext文件

<?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:aop="http://www.springframework.org/schema/aop" 
xmlns:context="http://www.springframework.org/schema/context" 
xmlns:tx="http://www.springframework.org/schema/tx" 
xsi:schemaLocation=" 
http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context-3.0.xsd 
http://www.springframework.org/schema/tx 
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 
http://www.springframework.org/schema/aop 
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"> 

<bean id="hibernateTemplate"  class="org.springframework.orm.hibernate3.HibernateTemplate"> 
    <property name="sessionFactory"> 
     <ref local="sessionFactory" /> 
    </property> 
</bean> 
<context:annotation-config /> 
    <context:component-scan base-package="com.yeah.server.*" /> 
    <aop:aspectj-autoproxy /> 

<!--Mysql database connection info--> 
<bean name="dataSource" id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
<property name="driverClassName" value="com.mysql.jdbc.Driver"/> 
<property name="url" value="jdbc:mysql://192.168.1.4:3306/YeaH"/> 
<property name="username" value="root"/> 
<property name="password" value=""/> 
</bean> 

<!-- Hibernate --> 
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="mappingResources"> 
    <list> 
     <value>com/yeah/shared/model/User.hbm.xml</value> 
     <value>com/yeah/shared/model/Comment.hbm.xml</value> 
     <value>com/yeah/shared/model/Album.hbm.xml</value> 
     <value>com/yeah/shared/model/Picture.hbm.xml</value> 
    </list> 
    </property> 
    <property name="hibernateProperties"> 
    <props> 
    <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 
    <prop key="hibernate.show_sql">true</prop> 
    <prop key="hibernate.hbm2ddl.auto">update</prop> 
    </props> 
    </property> 
    </bean> 
    <!-- Gilead --> 
    <bean id="proxySerializer"  class="net.sf.gilead.core.serialization.GwtProxySerialization" /> 

<bean id="proxyStore" class="net.sf.gilead.core.store.stateless.StatelessProxyStore"> 
<property name="proxySerializer" ref="proxySerializer" /> 
</bean> 

<bean id="persistenceUtil" class="net.sf.gilead.core.hibernate.HibernateUtil"> 
<property name="sessionFactory" ref="sessionFactory"/> 
</bean> 

<bean id="persistentBeanManager" class="net.sf.gilead.core.PersistentBeanManager"> 
    <property name="proxyStore" ref="proxyStore"/> 
    <property name="persistenceUtil" ref="persistenceUtil"/> 
</bean> 

<!-- a PlatformTransactionManager is still required --> 
    <bean id="transactionManager"  class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
     <property name="dataSource" ref="dataSource"/> 
    </bean> 
    </beans> 

而這裏的我的測試文件

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations={"classpath:**/applicationContext.xml"}) 
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback =  false) 
@Transactional 
public class UserDAOTest { 

private static Logger log = Logger.getLogger(UserDAOTest.class); 
@Autowired 
private UserDAO userDAO; 

@Test 
public void getItemById() { 

    User user = null; 
    long id = 1; 
    user = userDAO.getItemById(id); 
    assertNotNull(user); 

} 
} 
+1

燦你發佈UserDAO?此外,如果你可以修復堆棧跟蹤的格式,可能會有所幫助。 – abalogh 2011-05-24 15:17:52

回答

7

No matching bean of type [com.yeah.server.dao.UserDAO] found for dependency

你的組件掃描LO ok stange: <context:component-scan base-package="com.yeah.server.*" />

它應該是一個包而不是一個模式。 嘗試:<context:component-scan base-package="com.yeah.server" />

+0

的確,這就是爲什麼它被稱爲* base * -package。這是掃描開始的包。 – 2011-05-24 14:16:03

4

這是一個猜測,但:

<context:component-scan base-package="com.yeah.server.*" /> 

確實應該

<context:component-scan base-package="com.yeah.server" /> 

隨着出.*它不是一個路線,只需一個包名

+0

不行,仍然是同樣的問題。 – karq 2011-05-24 14:44:26

+1

好吧,它在那裏。應用程序上下文沒有找到任何實現UserDAO的bean。選擇非常渺茫,要麼它不在'com.yeah.server'中,要麼它沒有用@ Component' @ Repository'註釋,所以被組件掃描忽略。 – 2011-05-24 15:28:46