2016-05-12 12 views
1

Ich entwickle Integrationstests für die DAO-Ebene meiner kleinen App und stehe vor einem Problem. Ich benutze 2 verschiedene application-config.xml zum Testen (um HSQLDB zu verwenden) und Produzieren (MySql). Obwohl ich meine Produktionskonfigurationsdatei in eine Testdatei importiert habe, kann Spring sie immer noch nicht finden. Als Ergebnis wurde keine berechtigende Bean vom Typ [DAO] für die Abhängigkeit gefunden (hoffe, es liegt an diesem Problem). Es half weder der vollständige Pfad noch die Verwendung von **/oder/für XML-Dateien.Spring kann app-config.xml nicht von app-config-text.xml finden

Exception I erhalten:

org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.phoneBook.DAO.ContactDAO] found for dependency 

Meine Testklasse:

@RunWith(SpringJUnit4ClassRunner.class) 
    @ContextConfiguration(locations = {"classpath:**/application-context-test.xml"/*, "/application-config.xml"*/}) 
    @TransactionConfiguration(transactionManager = "transactionManager",defaultRollback = true) 
    @Transactional 
    public class ContactTest { 
    //various fields for tests 
@Inject 
     private ContactDAO contactIntegrDAO; 
     @Inject 
     private UserDAO userItegrDAO; 

// various test methods 
} 

Falls ich Kommentar- "/application-config.xml" in @ContextConfiguration meine Testkonfiguration (mit HSQLDB Datasource) doesn starte überhaupt nicht und habe alle Integrationstests in der Produktions-DB aufgerufen.

Testaufbau in anwendungskontext test.xml:

<import resource="classpath:**/application-config.xml"/> 

Produktionskonfiguration in anwendungs ​​config.xml:

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

<tx:annotation-driven transaction-manager="transactionManager" /> 

<bean id="propertyConfigurer" 
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="location" value="classpath:properties/database.properties" /> 
</bean> 
<!-- Alternative way to set database.properties --> 
<!-- <context:property-placeholder location="classpath:properties\database.properties" 
    /> --> 

<bean id="dataSource" 
    class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName" value="${jdbc.driverClassName}" /> 
    <property name="url" value="${jdbc.url}" /> 
    <property name="username" value="${jdbc.username}" /> 
    <property name="password" value="${jdbc.password}" /> 
</bean> 

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="entityManagerFactory" /> 
</bean> 

<bean id="entityManagerFactory" 
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="packagesToScan" value="com.phoneBook.entities" /> 
    <property name="jpaVendorAdapter"> 
     <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" /> 
    </property> 
    <property name="jpaProperties"> 
     <props> 
      <prop key="hibernate.dialect">${hibernate.dialect}</prop> 
      <prop key="hibernate.show_sql">${hibernate.show_sql}</prop> 
      <prop key="hibernate.flushMode">${hibernate.flushMode}</prop> 
      <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop> 
     </props> 
    </property> 
</bean> 

<bean id="persistenceExceptionTranslationPostProcessor" 
    class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" /> 

Aufbau des Projekt:

enter image description here

Jede Hilfe wird geschätzt.

Update:

Dank asg's Antwort, die ich falsche Schreibweise von Classpath korrigiert, aber leider das Problem bleibt

Antwort

1

Problem mit Ihrem Testanwendungskontext sein könnte.

Testaufbau in anwendungskontext test.xml:

<import resource="clathpath:**/application-config.xml"/> 

Versuchen Sie es zu ändern:

Editiert:

<import resource="classpath:application-config.xml"/> 

Sie importieren ‚src/resources/anwendungs- XML-Datei "config.xml" in die Datei "test/resources/application-config-test.xml".

Ändern Sie Ihre Importanweisung in die oben bearbeitete Anweisung. Es sollte für Sie arbeiten.

+0

Danke für eine Bemerkung. Trotzdem ist das Problem das gleiche/ – ryzhman

+0

Ich habe einige Beispiele ausprobiert. Bitte werfen Sie einen Blick und lassen Sie mich wissen, ob es für Sie funktioniert. – asg