Les tests de JUnit sont réussis dans Eclipse mais échouent dans Maven Surefire

j'ai écrit quelques tests JUnit en utilisant les bibliothèques JUnit 4 et spring-test. Quand je fais les tests à L'intérieur D'Eclipse, je m'en sors bien et je réussis. Mais quand je les exécute en utilisant Maven (pendant le processus de construction), ils échouent en donnant une erreur liée au ressort. Je ne sais pas ce qui cause le problème, JUnit, Surefire ou Spring. Voici mon code de test, la configuration du ressort et l'exception que J'obtiens de Maven:

PersonServiceTest.java

package com.xyz.person.test;

import static com.xyz.person.util.FjUtil.toFjList;
import static junit.framework.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;

import java.util.List;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.transaction.TransactionConfiguration;
import org.springframework.transaction.annotation.Transactional;

import com.xyz.person.bo.Person;
import com.xyz.person.bs.PersonService;

import fj.Effect;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath*:personservice-test.xml" })
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = false)
public class PersonServiceTest {

    @Autowired
    private PersonService service;

    @Test
    @Transactional
    public void testCreatePerson() {
        Person person = new Person();
        person.setName("abhinav");
        service.createPerson(person);

        assertNotNull(person.getId());
    }

    @Test
    @Transactional
    public void testFindPersons() {
        Person person = new Person();
        person.setName("abhinav");
        service.createPerson(person);

        List<Person> persons = service.findPersons("abhinav");
        toFjList(persons).foreach(new Effect<Person>() {
            public void e(final Person p) {
                assertEquals("abhinav", p.getName());
            }});
    }

}

personservice-test.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans.xsd
      http://www.springframework.org/schema/tx
      http://www.springframework.org/schema/tx/spring-tx.xsd
      http://www.springframework.org/schema/aop
      http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
      http://www.springframework.org/schema/context
      http://www.springframework.org/schema/context/spring-context-2.5.xsd">

    <import resource="classpath:/personservice.xml" />

    <bean id="datasource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource"
        lazy-init="true">
        <property name="driverClassName" value="org.apache.derby.jdbc.EmbeddedDriver" />
        <property name="url" value="jdbc:derby:InMemoryDatabase;create=true" />
    </bean>

    <bean id="entityManagerFactory"
        class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="datasource" />
        <property name="persistenceUnitName" value="PersonService" />
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                <property name="databasePlatform" value="org.hibernate.dialect.DerbyDialect" />
                <property name="showSql" value="true" />
                <property name="generateDdl" value="true" />
            </bean>
        </property>
        <property name="jpaPropertyMap">
            <map>
                <entry key="hibernate.validator.autoregister_listeners" value="false" />
                <entry key="javax.persistence.transactionType" value="RESOURCE_LOCAL" />
            </map>
        </property>
    </bean>

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

    <tx:annotation-driven transaction-manager="transactionManager"
        proxy-target-class="false" />

    <bean id="beanMapper" class="org.dozer.DozerBeanMapper">
        <property name="mappingFiles">
            <list>
                <value>personservice-mappings.xml</value>
            </list>
        </property>
    </bean>

</beans>

Exception dans Maven

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.xyz.person.test.PersonServiceTest
23:18:51,250  WARN JDBCExceptionReporter:77 - SQL Warning: 10000, SQLState: 01J01
23:18:51,281  WARN JDBCExceptionReporter:78 - Database 'InMemoryDatabase' not created, connection made to existing database instead.
23:18:52,937  WARN JDBCExceptionReporter:77 - SQL Warning: 10000, SQLState: 01J01
23:18:52,937  WARN JDBCExceptionReporter:78 - Database 'InMemoryDatabase' not created, connection made to existing database instead.
23:18:52,953  WARN TestContextManager:429 - Caught exception while allowing TestExecutionListener [org.springframework.test.context.transaction.TransactionalTestExecutionListener@359a359a] to process 'after' execution for test: method [public void com.xyz.person.test.PersonServiceTest.testCreatePerson()], instance [com.xyz.person.test.PersonServiceTest@1bc81bc8], exception [org.springframework.transaction.IllegalTransactionStateException: Pre-bound JDBC Connection found! JpaTransactionManager does not support running within DataSourceTransactionManager if told to manage the DataSource itself. It is recommended to use a single JpaTransactionManager for all transactions on a single DataSource, no matter whether JPA or JDBC access.]
java.lang.IllegalStateException: No value for key [org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean@3f563f56] bound to thread [main]
        at org.springframework.transaction.support.TransactionSynchronizationManager.unbindResource(TransactionSynchronizationManager.java:199)
        at org.springframework.orm.jpa.JpaTransactionManager.doCleanupAfterCompletion(JpaTransactionManager.java:489)
        at org.springframework.transaction.support.AbstractPlatformTransactionManager.cleanupAfterCompletion(AbstractPlatformTransactionManager.java:1011)
        at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:804)
        at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:723)
        at org.springframework.test.context.transaction.TransactionalTestExecutionListener$TransactionContext.endTransaction(TransactionalTestExecutionListener.java:515)
        at org.springframework.test.context.transaction.TransactionalTestExecutionListener.endTransaction(TransactionalTestExecutionListener.java:290)
        at org.springframework.test.context.transaction.TransactionalTestExecutionListener.afterTestMethod(TransactionalTestExecutionListener.java:183)
        at org.springframework.test.context.TestContextManager.afterTestMethod(TestContextManager.java:426)
        at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:90)
        at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72)
        at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:240)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:193)
        at org.junit.runners.ParentRunner.schedule(ParentRunner.java:52)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
        at org.junit.runners.ParentRunner.access"151920920"0(ParentRunner.java:42)
        at org.junit.runners.ParentRunner.evaluate(ParentRunner.java:184)
        at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
        at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
        at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:180)
        at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:59)
        at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:115)
        at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:102)
        at org.apache.maven.surefire.Surefire.run(Surefire.java:180)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
        at java.lang.reflect.Method.invoke(Method.java:599)
        at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:350)
        at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1021)
23:18:53,078  WARN TestContextManager:377 - Caught exception while allowing TestExecutionListener [org.springframework.test.context.transaction.TransactionalTestExecutionListener@359a359a] to process 'before' execution of test method [public void com.xyz.person.test.PersonServiceTest.testFindPersons()] for test instance [com.xyz.person.test.PersonServiceTest@79f279f2]
org.springframework.transaction.IllegalTransactionStateException: Pre-bound JDBC Connection found! JpaTransactionManager does not support running within DataSourceTransactionManager if told to manage the DataSource itself. It is recommended to use a single JpaTransactionManager for all transactions on a single DataSource, no matter whether JPA or JDBC access.
        at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:304)
        at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:371)
        at org.springframework.test.context.transaction.TransactionalTestExecutionListener$TransactionContext.startTransaction(TransactionalTestExecutionListener.java:507)
        at org.springframework.test.context.transaction.TransactionalTestExecutionListener.startNewTransaction(TransactionalTestExecutionListener.java:269)
        at org.springframework.test.context.transaction.TransactionalTestExecutionListener.beforeTestMethod(TransactionalTestExecutionListener.java:162)
        at org.springframework.test.context.TestContextManager.beforeTestMethod(TestContextManager.java:374)
        at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:73)
        at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:82)
        at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72)
        at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:240)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:193)
        at org.junit.runners.ParentRunner.schedule(ParentRunner.java:52)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
        at org.junit.runners.ParentRunner.access"151920920"0(ParentRunner.java:42)
        at org.junit.runners.ParentRunner.evaluate(ParentRunner.java:184)
        at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
        at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
        at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:180)
        at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:59)
        at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:115)
        at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:102)
        at org.apache.maven.surefire.Surefire.run(Surefire.java:180)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
        at java.lang.reflect.Method.invoke(Method.java:599)
        at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:350)
        at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1021)
Tests run: 3, Failures: 0, Errors: 3, Skipped: 0, Time elapsed: 15.625 sec <<< FAILURE!

Results :

Tests in error:
  testCreatePerson(com.xyz.person.test.PersonServiceTest)
  testCreatePerson(com.xyz.person.test.PersonServiceTest)
  testFindPersons(com.xyz.person.test.PersonServiceTest)

Tests run: 3, Failures: 0, Errors: 3, Skipped: 0
70
demandé sur Abhinav Sarkar 2010-07-29 22:05:41

16 réponses

j'ai eu le même problème (les tests de JUnit ont échoué dans Maven Surefire mais ont réussi dans Eclipse) et j'ai réussi à le résoudre en réglant forkMode à toujours dans la configuration de maven surefire dans pom.xml:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.12</version>
    <configuration>
        <forkMode>always</forkMode>
    </configuration>
</plugin>

paramètres Surefire: http://maven.apache.org/plugins/maven-surefire-plugin/test-mojo.html

Edit (Janvier 2014):

comme Peter Perháč fait remarquer, le paramètre forkMode est déprécié depuis Surefire 2.14. À partir de Surefire 2.14 utilisez ceci à la place:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.16</version>
    <configuration>
        <reuseForks>false</reuseForks>
        <forkCount>1</forkCount>
    </configuration>
</plugin>

pour plus d'informations, voir Options de fourche et exécution des essais en parallèle

82
répondu simon 2017-05-23 12:34:18

j'ai subitement ressenti cette erreur, et la solution pour moi était de désactiver les tests en parallèle.

votre milage peut varier, puisque je pourrais réduire le nombre de tests échoués en configurant surefire pour exécuter des tests parallèles par classes.:

            <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.7.2</version>
                <configuration>
                    <parallel>classes</parallel>
                    <threadCount>10</threadCount>
                </configuration>
            </plugin>

comme j'ai écrit en premier, ce n'était pas suffisant pour ma suite de test, donc j'ai complètement désactivé parallèle en supprimant la section <configuration> .

7
répondu Jesper Rønn-Jensen 2011-09-26 08:25:15

j'ai eu un problème similaire, l'annotation @Autowired dans le code de test ne fonctionnait pas en utilisant la ligne de commande Maven alors qu'elle fonctionnait bien dans Eclipse. Je viens de mettre à jour ma version JUnit de 4.4 à 4.9 et le problème a été résolu.

<dependency>
    <groupId>junit</groupId
    <artifactId>junit</artifactId>
    <version>4.9</version>
</dependency>
6
répondu cartman1989 2012-10-29 08:37:02

j'ai le même problème,mais avec IntelliJ IDEA + Maven + TestNG + spring-test. ( printemps-test est essentiel, bien sûr :) ) Il a été corrigé lorsque j'ai changé la config de maven-surefire-plugin pour désactiver les tests d'exécution en parallèle. Comme ceci:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.9</version>
    <configuration>
        <skipTests>${maven.test.skip}</skipTests>
        <trimStackTrace>false</trimStackTrace>
        <!--<parallel>methods</parallel>-->
        <!-- to skip integration tests -->
        <excludes>
            <exclude>**/IT*Test.java</exclude>
            <exclude>**/integration/*Test.java</exclude>
        </excludes>
    </configuration>
    <executions>
        <execution>
            <id>integration-test</id>
            <phase>integration-test</phase>
            <goals>
                <goal>test</goal>
            </goals>
            <configuration>
                <skipTests>${maven.integration-test.skip}</skipTests>
                <!-- Make sure to include this part, since otherwise it is excluding Integration tests -->
                <excludes>
                    <exclude>none</exclude>
                </excludes>
                <includes>
                    <include>**/IT*Test.java</include>
                    <include>**/integration/*Test.java</include>
                </includes>
            </configuration>
        </execution>
    </executions>
</plugin>
5
répondu s13o 2017-01-19 13:27:02

cela ne s'applique pas exactement à votre situation, mais j'ai eu la même chose -- les tests qui passeraient en Eclipse ont échoué quand le but du test de Maven a été effectué.

il s'est avéré être un test plus tôt dans ma suite, dans un paquet différent . Ça m'a pris une semaine à résoudre!

un test antérieur testait quelques classes de Logback, et créait un contexte de Logback à partir d'un fichier de configuration.

le dernier test était tester une sous-classe du SimpleRestTemplate de Spring, et d'une manière ou d'une autre, le contexte de Logback antérieur a été tenu, avec DEBUG on. Cela a provoqué des appels supplémentaires dans RestTemplate pour log HttpStatus,etc.

c'est une autre chose de vérifier si quelqu'un se retrouve dans cette situation. J'ai résolu mon problème en injectant des moqueries dans ma classe de test de Logback, de sorte qu'aucun contexte de Logback réel n'a été créé.

3
répondu Jim Jarrett 2012-01-19 22:10:56

j'ai eu le même problème, mais le problème pour moi était que les assertions Java (e.g. assert(num > 0)) n'étaient pas activées pour Eclipse, mais étaient activées lors de l'exécution maven.

donc exécuter les tests de jUnit à partir D'Eclipse n'a pas déclenché l'erreur d'assertion.

cela est précisé lors de l'utilisation de jUnit 4.11 (par opposition à l'ancienne version que j'utilisais) parce qu'il imprime l'erreur d'affirmation, par exemple

java.lang.AssertionError: null
    at com.company.sdk.components.schema.views.impl.InputViewHandler.<init>(InputViewHandler.java:26)
    at test.com.company.sdk.util.TestSchemaExtractor$MockInputViewHandler.<init>(TestSchemaExtractor.java:31)
    at test.com.company.sdk.util.TestSchemaExtractor.testCreateViewToFieldsMap(TestSchemaExtractor.java:48)
3
répondu Ryan 2013-01-21 17:04:04

[Je ne suis pas sûr que ce soit une réponse à la question originale, puisque la stactrace ici semble légèrement différente, mais il peut être utile à d'autres.]

vous pouvez obtenir des tests échouant dans Surefire lorsque vous utilisez également Cobertura (pour obtenir des rapports de couverture de code). Cela est dû au fait que Cobertura a besoin de mandataires (pour mesurer l'utilisation du code) et qu'il y a une sorte de conflit entre ces mandataires et les mandataires de ressort. Ce seulement se produit lorsque le printemps utilise cglib2, ce qui serait le cas si, par exemple, vous avez proxy-target-class="true" , ou si vous avez un objet proxy qui n'est pas d'implémenter des interfaces.

le correctif normal est d'ajouter une interface. Ainsi, par exemple, DAOs devrait être une interface, implémentée par une classe DAOImpl. Si vous autorisez l'interface, tout va bien se passer (parce que cglib2 n'est plus nécessaire; un simple proxy JDK vers l'interface peut être utilisé à la place et Cobertura fonctionne très bien avec ce.)

cependant, vous ne pouvez pas utiliser d'interfaces avec des contrôleurs annotés (vous obtiendrez une erreur d'exécution lorsque vous essayez d'utiliser le contrôleur dans un servlet) - Je n'ai pas de solution pour les tests de ressort de Cobertura + que les contrôleurs autowire.

2
répondu andrew cooke 2012-03-23 13:54:14

j'ai eu un problème similaire: les tests de JUnit ont échoué dans Maven Surefire mais ont réussi dans Eclipse quand j'ai utilisé la version 4.11.0 de la bibliothèque JUnit du dépôt SpringSource Bundle. Particulier:

<dependency>
    <groupId>org.junit</groupId>
    <artifactId>com.springsource.org.junit</artifactId>
    <version>4.11.0</version>
</dependency>

puis je l'ai remplacé par la version 4.11 de la bibliothèque JUnit et tout fonctionne très bien.

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
</dependency>
2
répondu Lukas Risko 2013-10-25 20:13:54

j'ai eu ce problème aujourd'hui tester une méthode qui a converti un objet qui contenait un Map à une chaîne JSON. Je suppose Qu'Eclipse et le plugin Maven surefire utilisaient des JREs différents qui avaient des implémentations différentes de HashMap ou quelque chose, ce qui a fait que les tests exécutés à travers Eclipse ont réussi et que les tests exécutés à travers surefire ont échoué ( assertEquals a échoué). La solution la plus simple était d'utiliser une implémentation de Map qui avait une commande fiable.

1
répondu Mitch 2012-03-15 08:27:06

j'ai eu un problème similaire avec une cause différente et donc une solution différente. Dans mon cas, j'ai en fait eu une erreur où un objet singleton avait une variable membre modifiée d'une manière non-threadsafe. Dans ce cas, le fait de suivre les réponses acceptées et de contourner le test parallèle ne ferait que masquer l'erreur réellement révélée par le test. Ma solution, bien sûr, est de réparer le design pour que je n'ai pas ce mauvais comportement dans mon code.

1
répondu Brick 2017-02-23 18:12:26

vous n'avez pas besoin d'injecter une source de données dans le JpaTransactionManager car EntityManagerFactory dispose déjà d'une source de données. Essayez ce qui suit:

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
   <property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
0
répondu Richard Kettelerij 2010-07-29 18:26:41

généralement, lorsque les tests passent dans eclipse et échouent avec maven, c'est un problème de classepath parce que c'est la principale différence entre les deux.

pour que vous puissiez vérifier la classpath avec maven-X test et vérifier la classpath d'eclipse via les menus ou dans le .classpath fichier dans la racine de votre projet.

Êtes-vous sûr par exemple que personservice-test.xml est dans classpath ?

0
répondu Bruno Thomas 2010-07-29 18:35:06

cela m'a aidé à résoudre mon problème. J'avais des symptômes similaires dans le fait que maven ne réussirait pas, cependant exécuter des tests junit fonctionne très bien.

comme il s'avère que mon parent pom.le xml contient la définition suivante:

    <plugin>
      <artifactId>maven-surefire-plugin</artifactId>
      <version>2.9</version>
      <configuration>
        <forkMode>pertest</forkMode>
        <argLine>-Xverify:none</argLine>
      </configuration>
    </plugin>

et dans mon projet je l'outrepasse pour enlever l'argLine:

    <plugin>
       <artifactId>maven-surefire-plugin</artifactId>
       <configuration>
            <forkMode>pertest</forkMode>
            <argLine combine.self="override"></argLine>
          </configuration>
    </plugin>

espérons que cela aidera quelqu'un à résoudre surefire plugin.

0
répondu mmastika 2013-09-17 05:09:43

j'ai eu le même problème, et la solution pour moi était de permettre à Maven de gérer toutes les dépendances, y compris les pots locaux. J'ai utilisé Maven pour les dépendances en ligne, et configuré le chemin de compilation manuellement pour les dépendances locales. Maven n'était donc pas au courant des dépendances que j'avais configurées manuellement.

j'ai utilisé cette solution pour installer les dépendances locales jar dans Maven:

comment ajouter des fichiers jar locaux dans maven project?

0
répondu Bitango.me 2017-05-23 11:54:39

le résultat d'exécution du Test différent de JUnit run et de maven install semble être le symptôme de plusieurs problèmes.

désactiver la réutilisation de thread l'exécution de test a également éliminé le symptôme dans notre cas, mais l'impression que le code n'était pas thread-safe était encore forte.

dans notre cas, la différence était due à la présence d'un haricot qui modifiait le comportement d'essai. Exécuter juste le test de JUnit serait très bien, mais exécuter le la cible du projet install se solderait par un échec. Comme il s'agissait du cas d'essai en cours d'élaboration, il était immédiatement suspect.

il en est résulté qu'un autre cas d'essai instanciait un haricot à travers le ressort qui survivrait jusqu'à l'exécution du nouveau cas d'essai. La présence du haricot modifiait le comportement de certaines classes et produisait le résultat raté.

La solution dans notre cas, était de se débarrasser de la fève, qui n'était pas nécessaire en premier lieu (encore un autre prix du copier+coller gun).

je suggère à tous ceux qui ont ce symptôme d'étudier la cause profonde. Désactiver la réutilisation de thread dans l'exécution des tests ne peut que le cacher.

0
répondu manuelvigarcia 2017-10-04 06:51:17

il est très probable que vos fichiers de configuration se trouvent dans src/main/resources , alors qu'ils doivent se trouver sous src/test/resources pour fonctionner correctement sous maven.

https://cwiki.apache.org/UIMA/differences-between-running-unit-tests-in-eclipse-and-in-maven.html

je réponds après deux ans parce que je n'ai pas pu trouver cette réponse ici et je pense que c'est la bonne un.

-1
répondu Miguel 2012-08-06 15:54:52