IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Maven Java Discussion :

mvn sonar:sonar ne démarre le context de spring sur la phase de test


Sujet :

Maven Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Août 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2012
    Messages : 2
    Points : 3
    Points
    3
    Par défaut mvn sonar:sonar ne démarre le context de spring sur la phase de test
    Bonjour,

    Je suis en train de développer une application web, je souhaite mettre en place un outil de gestion de qualité de code donc j'ai choisi Sonar 3.1.1.

    Pour l'exécution de test unitaire j'utilise Surefire et pour les test d'intégration j'utilise Failsafe. Les framework pour implémenter les test sont listés ci-dessous:

    - Sonar 3.1.1
    - Plugin maven surefire 2.12
    - Plugin maven failsafe 2.12
    - Plugin maven jacoco
    - JUnit (annotations @Test)
    - Spring (utilisation de ContextConfiguration pour charger le context), pour l'injection de dépendanes j'utilise @Autowired.

    J'ai un projet maven père faisant la gestion d'un module back-end et an autre module common. Lors du lancement de la commande maven : mvn clean install sur le projet contenant la logique métier, tous les test unitaires terminent avec succès, ensuite quand je lance la commande mvn sonar:sonar dans la phase de test le context de l'application (context spring) ne se charge pas et du coup les injections de dépendances dans les composant DAO et Services ne se font pas et en conséquence aucun test se déroule comme il faut .

    En pièce jointe vous trouverez le fichier pom père et le fichier pom du module back-end.

    Voici l'erreur lors de la phase de test avec la commande mvn sonar:sonar:
    java.lang.IllegalStateException: Failed to load ApplicationContext
    at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:157)
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:109)
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:75)
    at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:321)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:211)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174)
    at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:236)
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:134)
    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:113)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)
    at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165)
    at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)
    at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:103)
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:74)
    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'invoiceService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.amadeus.sep.psi.service.InvoiceCreationService com.amadeus.sep.psi.service.InvoiceService.invoiceCreationService; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.amadeus.sep.psi.service.InvoiceCreationService] 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)}
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:287)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1106)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:609)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:469)
    at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:103)
    at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:1)
    at org.springframework.test.context.support.DelegatingSmartContextLoader.loadContext(DelegatingSmartContextLoader.java:228)
    at org.springframework.test.context.TestContext.loadApplicationContext(TestContext.java:124)
    at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:148)
    ... 30 more

    Si vous avez besoin d'un autre information n'hésitez pas à me prévenir s'il te plaît.

    Je vous remercie d'avance votre aide.

    cdcarlys
    Fichiers attachés Fichiers attachés

  2. #2
    Candidat au Club
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Août 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2012
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Solution au problème
    L'origin du problème c'est que Sonar 3.1.1 utilise par défault Coberture pour l'exécution de test, donc ce framework génére certain proxies pour l'instances qu'on souhaite utiliser lors des test tel que les composants de la couche services ou de la couche DAO.
    Pour éviter la génération de ces proxies vaut mieux utiliser Jacoco comme gestionnaire de test dans le service sonar, ce qui es facile à faire si l'on installe la version 3.2 de Sonar étant donné que celui est configuré par défault.
    J'espère que cette réponse pourra aide à l'avenir quelqu'un d'autre avec le même problème.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. SONAR, sonar-runner et tests unitaires
    Par omekiane dans le forum Tests et Performance
    Réponses: 0
    Dernier message: 30/08/2011, 09h03
  2. [Sonar] mvn sonar:sonar
    Par captu dans le forum Qualimétrie
    Réponses: 14
    Dernier message: 15/07/2010, 15h10
  3. [Sonar] Exécuter mvn sonar:sonar dans un environnement clos
    Par romaintaz dans le forum Qualimétrie
    Réponses: 1
    Dernier message: 16/06/2010, 14h49
  4. Réponses: 1
    Dernier message: 30/04/2010, 15h14
  5. [Integration] Charger le contexte une seule fois lors d'un test unitaire
    Par Kelem dans le forum Spring
    Réponses: 0
    Dernier message: 18/08/2009, 19h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo