2015-10-20 3 views
0

J'essaie d'exécuter un test d'intégration qui a un SpringApplicationConfiguration différent des autres tests d'intégration. Le problème se manifeste uniquement lorsque Gemfire est configuré.Comment effectuer des tests d'intégration dans Spring Boot avec Gemfire et plusieurs configurations d'applications Spring?

Une démonstration de l'erreur ici: https://github.com/kemitix/test-spring-boot-gemfire-testing

Il existe deux classes de test ContextsApplicationTests et ContextsApplicationWithCustomTests.

La première utilise un SpringApplicationConfiguration standard basé sur la classe ContextsApplication. L'autre tente également d'inclure la classe CustomConfiguration pour remplacer un bean.

Testez un:

@IntegrationTest 
@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(classes = ContextsApplication.class) 
public class ContextsApplicationTests { 
... 

test deux:

@IntegrationTest 
@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(classes = { 
    ContextsApplication.class, 
    CustomConfiguration.class 
}) 
public class ContextsApplicationWithCustomTests { 

Sans avoir Gemfire a permis aux tests exécutés avec bonheur.

Cependant, ayant Gemfire configuré provoque un problème avec le chargeur de contexte lancer une IllegalArgumentException:

Caused by: java.lang.IllegalArgumentException: 
    a beanFactoryReference already exists for key cacheFactoryBean 

La sortie complète est inclus dans le fichier mvn-clean-install.txt dans le repo.

Lorsque les deux tests sont exécutés isolément, ils fonctionnent. Ce n'est que lorsqu'ils sont exécutés ensemble que le problème apparaît. Je soupçonne que l'instance de Gemfire que Spring Boot exécute provoque une sorte de saignement entre les deux tests qui provoque la séparation des Contextes. Malheureusement, je n'ai aucune idée de comment influencer cela.

+0

J'ai trouvé que je peux workround en ajoutant '@ DirtiesContext' à la classe' ContextsApplicationWithCustomTests'. Cependant, dans mon cas d'utilisation, cette configuration s'applique à tous les tests sauf un. L'exception est le test qui n'utilise pas 'CustomConfiguration'. L'utilisation de '@ DirtiesContext' sur' ContextsApplicationTests' ne résout pas le problème. –

Répondre

1

Vous pouvez également essayer CacheFactoryBean.setUseBeanFactoryLocator (false)

+0

Merci. Cela l'a réparé. '@Bean CacheFactoryBean cacheFactoryBean() { final CacheFactoryBean cacheFactoryBean = nouveau CacheFactoryBean(); cacheFactoryBean.setUseBeanFactoryLocator (false); return cacheFactoryBean; } ' –