Могу ли я запускать модульные тесты IntelliJ в проекте maven без повторного запуска целей maven?

У меня есть проект с глубокой структурой maven, и я оцениваю переход с Eclipse на IntelliJ.

Я импортировал pom.xml верхнего уровня. Я знаю, что могу:

  1. Создайте весь проект с целями maven (я использую «test-compile» для создания тестовых классов)
  2. Запустите тесты из средства запуска тестов IntelliJ. Кажется, это находит классы/тестовые классы из целевой папки проекта.

Тем не менее, я хотел бы просто изменить тест или тестируемый код, сохранить его и повторно запустить без повторного запуска тестовой компиляции maven вручную (как я мог бы с Eclipse). Возможно ли это с IntelliJ?

Я думаю, проблема в том, что действие IntelliJ 'Build Project' не создает тестовые классы (и другие классы) в целевой папке, которую просматривает средство запуска тестов.


person pduncan    schedule 01.05.2020    source источник
comment
Сначала вы должны импортировать весь проект в IntelliJ или в Eclipse. Вы можете просто повторно запустить тест (нажав на тест) после изменения кода в среде IDE (как Eclipse, так и IntelliJ), в противном случае что-то не так... кроме того, ваша сборка работает нормально в простой командной строке?   -  person khmarbaise    schedule 01.05.2020
comment
Я импортировал весь проект в IntelliJ. Повторный запуск теста, по-видимому, запускает тест в том состоянии, в котором он был, когда последний раз был встроен в целевые/тестовые классы. На самом деле, если я перестраиваю проект, он удаляет все файлы .class из цели, и попытка снова запустить тесты сообщает, что класс не найден.   -  person pduncan    schedule 01.05.2020
comment
Что-то действительно не так... Кстати: Какую версию IDEA вы используете?   -  person khmarbaise    schedule 01.05.2020


Ответы (2)


Если вы импортируете проект Maven в IntelliJ IDEA, вы сможете создавать и запускать тесты из IDE вместо Maven, что намного быстрее из-за инкрементной компиляции.

Убедитесь, что эта опция отключена, и используйте конфигурацию JUnit Run/Debug, не запускайте maven цели.

person CrazyCoder    schedule 01.05.2020
comment
У меня эта опция отключена, и я использую IntelliJ Run/Debug. Я действительно чувствую, что проблема в том, что Test runner ищет только /target тестовые классы, а сборка IntelliJ помещает их куда-то еще. - person pduncan; 01.05.2020
comment
Средство запуска тестов должно использовать путь к классам вместо жестко заданных каталогов. Выходные данные IntelliJ IDEA не передаются Maven, это предусмотрено дизайном, но это не должно влиять на правильно написанные приложения и тесты, которые не полагаются на расположение выходного каталога. - person CrazyCoder; 01.05.2020
comment
Хорошо... есть ли что-то, что я могу отладить, чтобы понять, почему этого не происходит? - person pduncan; 01.05.2020
comment
Посмотрите путь к классам в командной строке теста при запуске из среды IDE. Содержит ли он выходные каталоги? Есть ли в этих выходных каталогах необходимые файлы .class и ресурсы? Появляются ли классы в этих выходных каталогах после того, как вы используете Build | Строить? Есть ли в ваших тестах какая-либо конфигурация, которая явно ссылается на каталог target? Мы будем признательны за минимальный, полный и проверяемый пример, если вы хотите получить здесь помощь. - person CrazyCoder; 01.05.2020

Благодаря предложению @CrazyCoder я смог заставить это работать, выполнив следующие шаги, поскольку я думаю, что проблема заключалась в том, что артефакты Eclipse боролись с артефактами IntelliJ:

  1. Удалите все файлы .classpath, .project и .iml из всего дерева кода.
  2. Удаляем .idea из корня - надо начинать заново
  3. Откройте файл pom.xml верхнего уровня в IntelliJ.
  4. При необходимости выполните mvn compile (необходимо для меня из-за некоторых сгенерированных источников)
  5. Перестройте свой проект

После этого больше не открывайте свой проект в Eclipse!

person pduncan    schedule 01.05.2020
comment
Кроме того, однажды я открыл IntelliJ из командной строки, и по какой-то причине он открылся в родительской папке. Поэтому вместо открытия в C:\dev\myProject он открыл C:\dev. Это означало, что была создана папка конфигурации IntelliJ C:\dev\.idea. Когда я закрыл и снова открыл в нужном месте, это, казалось, сработало, но я не смог надежно запустить тесты из IDE, потому что некоторые пути были перепутаны в файлах .iml. Решение состояло в том, чтобы удалить C:\dev\.idea, C:\dev\myProject\.idea, все файлы *.iml и начать заново. - person pduncan; 19.05.2020