2015-11-23 1 views
0

J'ai un Hibernate SessionFactoryBean configuré dans mon applicationContext qui a déjà une source de données réelle en tant que propriété. Mais je voudrais utiliser une autre source de données locale/fictive dans ma classe de test en remplaçant la source de données qui a déjà été injectée dans la sessionfactory.Substitution de la source de données d'une sessionfactory hibernate dans les cas de test

La définition du bean dans le contexte de l'application principale est comme ceci.

<bean id="SessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" 
      abstract="false" scope="singleton" lazy-init="default" autowire="default"> 
     <property name="dataSource" ref="pcfDataSource"/> 
     <property name="hibernateProperties"> 
      <props> 
       <prop key="hibernate.dialect">$`db.hibernate.dialect} </prop> 
       <prop key="hibernate.show_sql">true</prop> 
       <prop key="hibernate.current_session_context_class">thread</prop> 
       <prop key="hibernate.cache.use_second_level_cache">true</prop> 
       <prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory</prop> 
      </props> 
     </property> 
</bean> 

J'ai une source de données locale comme dans mon cas de test:

template = InitializeDataSource.getInitializedDataSource(); 
DataSource dataSource = template.getDataSource; 

J'ai besoin de passer outre la source de données injecté avec celui dans le fond

+0

Vous pouvez regarder à l'aide des profils java. –

Répondre

1

Vous pouvez utiliser des profils si votre ressort version 3.1 ou plus récent: Mettez votre déclaration de haricots dans une balise de haricots avec profil

<beans profile="!test"> 
    <bean id="pcfDataSource" ...> 
      ... 
    </bean> 
</beans> 

Ensuite, dans votre classe de test que vous ajoutez « test » comme profil actif

@ActiveProfiles("test") 
@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = "app-context.xml") 
public class SampleTest 

Enfin, vous ajoutez votre configuration de source de données à la fin de votre classe de test

@Test 
public void someTest() { 
    ... 
} 

@Configuration 
public class MockDataSourceConfig { 
    @Bean 
    public DataSource pcfDataSource() { 
     Template template = InitializeDataSource.getInitializedDataSource(); 
     return template.getDataSource; 
    } 
} 
+0

Gargarao, merci pour la réponse, mais j'ai besoin d'une usine de session avec une source de données surchargée, je pense que cela me renvoie juste une source de données – puri

+0

Mon mauvais! J'ai édité montrant comment profiler la source de données. De cette façon, lorsque le printemps cherchera le haricot à injecter à l'intérieur de la fabrique de sessions, il obtiendra celui configuré dans la classe de test. –