Тесты JUnit проходят в Eclipse, но сбой в Maven Surefire

Я написал несколько тестов JUnit, используя библиотеки JUnit 4 и spring -test. Когда я запускаю тесты внутри Eclipse, тогда выполняйте штраф и передавайте. Но когда я запускаю их с помощью Maven (во время процесса сборки), они не дают spring связанной ошибки. Я не уверен, что вызывает проблему, JUnit, Surefire или Spring. Вот мой тестовый код, конфигурация spring и исключение, которое я получаю от 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>

Исключение в 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.springframew[email protected]359a359a] to process 'after' execution for test: method [public void com.xyz.person.test.PersonServiceTest.testCreatePerson()], instance [[email protected]], 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[email protected]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$3.run(ParentRunner.java:193)
        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
        at org.junit.runners.ParentRunner$2.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.springframew[email protected]359a359a] to process 'before' execution of test method [public void com.xyz.person.test.PersonServiceTest.testFindPersons()] for test instance [[email protected]]
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$3.run(ParentRunner.java:193)
        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
        at org.junit.runners.ParentRunner$2.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

Ответ 1

У меня была та же проблема (тесты JUnit не удалось выполнить в Maven Surefire, но прошли в Eclipse) и удалось решить эту проблему, установив forkMode на всегда в конфигурации maven surefire в pom.xml:

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

Параметры Surefire: http://maven.apache.org/plugins/maven-surefire-plugin/test-mojo.html

Изменить (январь 2014):

Как Питер Перхач указал, что параметр forkMode устарел с Surefire 2.14. Начиная с Surefire 2.14 используйте это вместо:

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

Для получения дополнительной информации см. Параметры вилки и параллельное тестирование

Ответ 2

Я внезапно испытал эту ошибку, и решение для меня состояло в том, чтобы отключить параллельное выполнение тестов.

Ваше многословие может отличаться, поскольку я мог бы снизить количество неудачных тестов, настроив surefire для запуска параллельных тестов с помощью "классов".:

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

Как я писал вначале, этого было недостаточно для моего тестового набора, поэтому я полностью отключил параллельную работу, удалив раздел <configuration>.

Ответ 3

У меня была аналогичная проблема, аннотация @Autowired в тестовом коде не работала при использовании командной строки Maven, пока она отлично работала в Eclipse. Я просто обновляю версию JUnit с 4.4 до 4.9, и проблема была решена.

<dependency>
    <groupId>junit</groupId
    <artifactId>junit</artifactId>
    <version>4.9</version>
</dependency>

Ответ 4

У меня есть аналогичная проблема, но с IntelliJ IDEA + Maven + TestNG + spring -test. ( spring -test необходимо, конечно:)) Он был исправлен, когда я изменил конфигурацию maven-surefire-plugin, чтобы отключить параллельные тесты запуска. Вот так:

<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

Это не совсем применимо к вашей ситуации, но у меня было то же самое - тесты, которые пройдут в Eclipse, не удались, когда была запущена цель тестирования с Maven.

Это оказался тест ранее в моем пакете, в другом пакете. Это заняло у меня неделю, чтобы решить!

Раньше тестирование тестировало некоторые классы журнала и создало контекст журнала из файла конфигурации.

В более позднем тесте был протестирован подкласс Spring SimpleRestTemplate, и каким-то образом был проведен более ранний контекст журнала с включенным DEBUG. Это вызвало дополнительные вызовы в RestTemplate для регистрации HttpStatus и т.д.

Это еще одна вещь, чтобы проверить, не попал ли в эту ситуацию. Я исправил свою проблему, введя некоторые Mocks в свой тестовый класс Logback, чтобы не создавались реальные контексты журнала.

Ответ 6

У меня была та же проблема, но проблема для меня заключалась в том, что утверждения Java (например, assert (num > 0)) не были включены для Eclipse, но были включены при запуске maven.

Поэтому запуск jUnit-тестов из Eclipse не вызвал ошибку утверждения.

Это становится ясным при использовании jUnit 4.11 (в отличие от старой версии, которую я использовал), поскольку он печатает ошибку утверждения, например.

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)

Ответ 7

[Я не уверен, что это ответ на исходный вопрос, так как stacktrace выглядит несколько иначе, но может быть полезно другим.]

Вы можете получить тесты с ошибкой в ​​Surefire, когда вы также используете Cobertura (чтобы получить отчеты о покрытии кода). Это связано с тем, что Cobertura требует прокси (для измерения использования кода), и существует некоторый конфликт между этими и Spring прокси. Это происходит только тогда, когда Spring использует cglib2, что было бы, если, например, у вас есть proxy-target-class="true", или если у вас есть прокси-сервер, который не реализует интерфейсы.

Нормальным решением для этого является добавление интерфейса. Так, например, DAO должны быть интерфейсами, реализуемыми классом DAOImpl. Если вы используете autwire на интерфейсе, все будет работать нормально (потому что cglib2 больше не требуется, вместо этого может использоваться более простой прокси JDK для интерфейса, и Cobertura отлично справляется с этим).

Однако вы не можете использовать интерфейсы с аннотированными контроллерами (вы получите ошибку времени выполнения при попытке использовать контроллер в сервлете). У меня нет решения для Cobertura + Spring, которые проверяют контроллеры autowire.

Ответ 8

У меня была аналогичная проблема: тесты JUnit не удалось в Maven Surefire, но были переданы в Eclipse, когда я использовал библиотеку JUnit версии 4.11.0 из SpringSource Bundle Repository. Particulary:

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

Затем я заменил его следующей библиотекой JUnit версии 4.11, и все работает нормально.

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
</dependency>

Ответ 9

У меня была эта проблема сегодня, когда я тестировал метод, который преобразовал объект, содержащий строку Map в строку JSON. Я предполагаю, что Eclipse и плагин Maven surefire используют разные JRE, у которых были разные реализации порядка HashMap или что-то еще, что привело к прохождению тестов через Eclipse, а тесты выполнялись с ошибкой surefire (assertEquals failed). Самым простым решением было использование реализации карты, имеющей надежный порядок.

Ответ 10

У меня была аналогичная проблема с другой причиной и, следовательно, с другим решением. В моем случае у меня на самом деле была ошибка, когда объект singleton имел переменную-член, модифицированную не-поточным способом. В этом случае в соответствии с принятыми ответами и обход параллельного тестирования будет скрыта ошибка, которая была фактически обнаружена в ходе теста. Мое решение, конечно же, заключается в том, чтобы исправить дизайн, чтобы у меня не было такого плохого поведения в моем коде.

Ответ 11

Вам не нужно вводить DataSource в JpaTransactionManager, поскольку у EntityManagerFactory уже есть источник данных. Попробуйте следующее:

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

Ответ 12

Обычно, когда тесты проходят в eclipse и сбой с maven, это проблема класса, потому что это основное различие между ними.

Итак, вы можете проверить путь к классу с помощью теста maven -X и проверить путь к классам eclipse через меню или файл .classpath в корневом каталоге вашего проекта.

Вы уверены, например, что personervice-test.xml находится в пути к классам?

Ответ 13

Это помогло мне в решении моих проблем. У меня были аналогичные симптомы в том, что maven потерпит неудачу, однако тесты junit работают нормально.

Как оказалось, мой родительский pom.xml содержит следующее определение:

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

И в моем проекте я переопределяю его, чтобы удалить argLine:

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

Надеюсь, это поможет кому-то в поиске и устранении неполадок.

Ответ 14

У меня была та же проблема, и решение для меня состояло в том, чтобы разрешить Maven обрабатывать все зависимости, в том числе и локальные банки. Я использовал Maven для онлайн-зависимостей и настраивал путь сборки вручную для локальных зависимостей. Таким образом, Maven не знал о зависимостях, которые я настраивал вручную.

Я использовал это решение для установки локальных зависимостей jar в Maven:

Как добавить локальные файлы jar в проект maven?

Ответ 15

Результат выполнения теста, отличный от JUnit run и от maven install, кажется, является симптомом для нескольких проблем.

Отключение повторного использования повторного использования потока также избавилось от симптом в нашем случае, но впечатление, что код не был потокобезопасным, все еще был сильным.

В нашем случае разница была обусловлена ​​наличием bean, который модифицировал тестовое поведение. Выполнение теста JUnit приведет к прекрасному результату, но запуск проекта install приведет к неудачному тестовому примеру. Поскольку это был тестовый пример, он был сразу же подозрительным.

Это привело к тому, что другой тестовый пример создавал экземпляр bean через Spring, который сохранился бы до выполнения нового тестового примера. Присутствие bean изменяло поведение некоторых классов и создавало неудачный результат.

Решение в нашем случае избавлялось от bean, который не был нужен в первую очередь (еще один приз из копий + паста).

Я предлагаю всем с этим симптомом исследовать причину. Отключение повторного использования потока при выполнении теста может скрыть его.

Ответ 16

Скорее всего, ваши файлы конфигурации находятся в src/main/resources, в то время как они должны находиться под управлением src/test/resources для правильной работы в maven.

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

Я отвечаю на это через два года, потому что я не мог найти здесь этот ответ, и я думаю, что он правильный.