Eclipse/Maven: тесты JUnit не скомпилированы при их запуске

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

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

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

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

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

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

Ответ 1

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

  • Щелкните правой кнопкой мыши папку src/test/java в проводнике пакетов
  • Выберите Путь сборки Настройка выходной папки
  • Введите target/test-classes, нажмите ОК

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

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

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

Ответ 2

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

  • Щелкните правой кнопкой мыши папку src/test/java
  • Выберите путь сборки → Настройка выходной папки
  • Введите целевые/тестовые классы, нажмите "ОК"

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

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

Ответ 3

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

Ответ 4

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

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

Ответ 5

Я столкнулся с такой же проблемой. Пробовал выше предложения по настройке выходной папки и Maven > Update Project, но не работал. Наконец, изменил мой testOutputDirectory на "build/classes", и теперь Unit Tests получаются и выполняются.

Наконец, нашел причину проблемы. В моем 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 конфигурации не требуется и является причиной вышеупомянутой проблемы. После удаления этого тега, юниты собираются для сборки > testclasses и запускаются во время сборки maven. Yippee:)

Ответ 6

Пожалуйста, проверьте путь "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>

Ответ 7

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

Ответ 8

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

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

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