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", потому что они не относятся к нечитаемой банке, которая должна быть предупреждена в перспективе "Маркеры". Поэтому легко игнорировать ее.