Eclipse / Maven: тесты JUnit не компилируются при их запуске - PullRequest
68 голосов
/ 22 мая 2011

Я работаю над проектом с использованием Maven и Eclipse (плагин m2eclipse). У меня проблемы с тестами JUnit:

Иногда при запуске их в Eclipse они не компилируются, а вместо этого используются старые файлы классов. Когда я удаляю файлы классов, я получаю ClassNotFoundExceptions в Eclipse. Затем я должен вручную перекомпилировать их, используя mvn test-compile или другие цели.

Я также заметил, что файлы классов тестов иногда помещаются в подкаталог classes вместо test-classes.

Я действительно не могу понять, что не так.

Java-файлы JUnit находятся в src/main/java и имеют правильное имя (*Test.java).

Нужно ли мне компилировать и запускать их всегда через Maven? Почему Eclipse не компилирует файлы, когда я хочу их запустить? (Интересно, что иногда это делает. Иногда все отлично работает.)

Ответы [ 10 ]

85 голосов
/ 17 января 2012

У меня была такая же проблема с STS Eclipse (вариант разработки Spring), m2e и JUnit. Решением было установить выходную папку для src/test/java в target/test-classes:

  1. Щелкните правой кнопкой мыши папку src/test/java в Package Explorer
  2. Выбрать Путь сборки -> Настроить папку вывода
  3. Введите target/test-classes, нажмите OK

Теперь изменения в тестовых классах скомпилированы правильно, и вы сможете запускать тесты JUnit в Eclipse.

Проблема в том, что Eclipse компилирует модульные тесты в папку вывода по умолчанию target/classes, в то время как плагин JUnit корректно пытается запустить их из test-classes.

На этот вопрос есть несколько дубликатов:

5 голосов
/ 20 сентября 2012

В дополнение к ответу ниже

  1. Щелкните правой кнопкой мыши папку src / test / java
  2. Выберите путь сборки -> Настроить выходную папку
  3. Введите целевые / тестовые классы, нажмите OK

. Вы должны убедиться, что ваш компоновщик правильно настроен, щелкнув правой кнопкой мыши по своему проекту и выбрав Свойства -> Построитель ,Если вы видите, что ваш компоновщик отсутствует, вам нужно установить его.В моем случае у проекта maven была зависимость AspectJ, и когда я использовал плагин Maven Eclipse для сборки своего проекта Eclipse, он искал сборщик AspectJ по умолчанию.Я установил средства разработки AspectJ, и это решило проблему.

Надеюсь, это поможет!

2 голосов
/ 20 января 2015

Наиболее вероятное объяснение проблемы, с которой вы столкнулись, заключается в том, что выходная папка src/test/java настроена неправильно.

Вместо исправления этой конфигурации вручную , вы можете попросить m2eclipse исправить это за вас: просто щелкните правой кнопкой мыши проект и выберите Maven> Обновить проект .

2 голосов
/ 22 мая 2011

И еще один момент: тестовые классы JUnit должны быть в src / test / java, а не в src / main / java, в противном случае Maven неправильно определяет их как тестовые классы и будет включен в упакованный jar, а не втестовая банка.

1 голос
/ 30 апреля 2018

Для кого-то, работающего над проектом java-scala mix, это то, что стоит отметить.Даже после настройки, как показано ниже,

<build>
    <testOutputDirectory>${basedir}/target/test-classes</testOutputDirectory>
    <plugins>
    ...
        <plugin>
            <groupId>net.alchim31.maven</groupId>
            <artifactId>scala-maven-plugin</artifactId>
            <version>3.3.2</version>
            <configuration>
                <testSourceDir>${basedir}/src/test/scala</testSourceDir>
                <testOutputDir>${basedir}/target/test-classes</testOutputDir>
            </configuration>
         </plugin>
    </plugins>
</build>

и выполнения Maven> Обновить проект , eclipse учитывает выходной каталог папки src / test / java в проектеоднако, не для папки src / test / scala.(Вы можете выяснить это, щелкнув правой кнопкой мыши по определенной исходной папке и выбрав Путь сборки> Настроить выходную папку ... , в которой должно отображаться расположение, указанное в pom для первого случая, однако, недля более позднего случая.

Это уже известная ошибка использования scala с m2e, как упомянуто здесь: http://scala -ide.org / docs / tutorials / m2eclipse /

Предупреждение

По состоянию на март 2013 года из-за ошибки src / main / scala и src / test / scala используют папку вывода по умолчанию (target / classes). Это может сбивать с толку> присборка тестов, поскольку их файлы классов не будут заканчиваться в target / test-class, как это было бы при сборке из командной строки. Вы можете обойти это, вручную изменив выходную папку для src / test / scala.

1 голос
/ 31 августа 2017

Убедитесь, что на значке вашего проекта есть восклицательный знак!В моем случае я проигнорировал наличие восклицательного знака, например: восклицательный знак на значке проекта

Откройте перспективу «Маркеры», а затем устраните неполадки в соответствии с советами. что показывает перспектива "Маркеры"

Тестовые классы junit могут быть успешно выполнены после того, как я назвал "mvn clean test", потому что они не ссылаются на нечитаемый jar, о котором следует предупредить в "Маркерах"Таким образом, это легко игнорировать ..

1 голос
/ 19 июля 2016

Пожалуйста, проверьте путь "testSourceDirectory", который можно настроить в вашем pom.xml. Затем добавьте папку (настроенную в пути «testSourceDirectory») в путь сборки eclipse.

Пожалуйста, найдите пример "testSourceDirectory" в pom.xml ниже:

<build>
    <testSourceDirectory>src/test/java</testSourceDirectory>
    <plugins>
     <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>      
    </plugins>
  </build>
1 голос
/ 22 августа 2015

Я столкнулся с той же проблемой. Приведенные выше предложения по настройке выходной папки & Maven> Обновить проект, но не сработали. Наконец, изменил мой testOutputDirectory на «build / classes», и теперь модульные тесты собираются и выполняются.

Наконец-то нашли причину проблемы. В моем pom мы также настроили плагин компилятора maven, как показано ниже

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
                <outputDirectory>build/classes</outputDirectory>
            </configuration>
       </plugin>

Настройка outputDirectory не нужна и была причиной вышеуказанной проблемы. После удаления этого тега junits компилируются в папку build> testclasses и запускаются также во время сборки maven. Угу :)

0 голосов
/ 01 августа 2018

Моя проблема была не в плагине JUnit, а в конфигурации моего pom.xml.

После просмотра всех ответов на этот вопрос, ответ @ Gulats дал мне понять, что я должен попытаться установить testOutputDirectory в моем разделе maven-compiler-plugin, и это помогло:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <configuration>
    <source>1.8</source>
    <target>1.8</target>
    <testOutputDir>${basedir}/target/test-classes</testOutputDir>
  </configuration>
</plugin>
0 голосов
/ 22 мая 2011

Eclipse не ожидает, что что-то еще будет мешать с файлами классов. Предполагается, что если вы не редактировали файл в Eclipse, он не изменился и не нуждается в компиляции. Я думаю, что проблема связана с тем, что Eclipse и Maven совместно используют выходной каталог. Я часто видел это, если моя сборка mvn не удалась, он удалил файлы классов как часть чистых, но не скомпилированных новых. Я думаю, что лучшим решением было бы создать отдельные сборки для mvn и eclipse, но я никогда не смотрел на это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...