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.
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. –