Maven / Surefire не находит тестов для запуска - PullRequest
14 голосов
/ 13 ноября 2010

Насколько я могу судить, расположение тестовых файлов правильное.

Когда я запускаю «mvn test», он находит четыре класса с именем SomethingTest (они находятся в папке «test»).

Однако он игнорирует любой из тестов jUnit (jUnit 4, помеченный @Test).

Как мне отладить это?

Редактировать - это, вероятно, связано с неверной версией jUnit. Я вижу это при запуске "mvn -X"

[DEBUG] Retrieving parent-POM: org.codehaus.plexus:plexus:pom:1.0.4 for project: org.codehaus.plexus:plexus-containers:pom:1.0.3 from the repository.
[DEBUG]       org.codehaus.plexus:plexus-container-default:jar:1.0-alpha-9-stable-1:runtime (selected for runtime)
[DEBUG]         junit:junit:jar:3.8.1:runtime (selected for runtime)
[DEBUG]         org.codehaus.plexus:plexus-utils:jar:1.0.4:runtime (removed - nearer found: 1.4.1)
[DEBUG]         classworlds:classworlds:jar:1.1-alpha-2:runtime (selected for runtime)

Несмотря на то, что моя первая зависимость от корневого модуля связана с jUnit 4.8.1, по какой-то причине в него включен jUnit 3.8.1.

Редактировать 2 - хорошо, похоже, это не ответ. Тестовый путь к классам включает в себя правильный jUnit (4) и мои тестовые классы.

Редактировать 3 - У меня были тестовые классы с именем SomethingTester. Когда я изменил его на SomethingTest, это сработало. Я проверил шаблоны включения для Surefire, и на самом деле он не был настроен на перехват Something Tester. Doh.

Ответы [ 2 ]

5 голосов
/ 13 ноября 2010

Может быть, это проблема:

mvn -X напечатает кучу таких, так что вы можете попытаться выяснить, если это что-тоиз вышесказанного - например, не использовать правильную версию JUnit (например, когда вы создаете из артефакта быстрого запуска, я думаю, что по умолчанию используется 3.8.1), с TestNG в пути к классам перед JUnit или около того.

Редактировать: Iтолько что попробовал это в простом проекте и классе, указанном в приведенной выше ссылке, и он работал нормально.Я использовал junit версии 4.8, это единственная зависимость в моем проекте.Просто чтобы подтвердить, вы аннотируете методы тестирования с помощью @ org.junit.Test, и в этих методах есть некоторые операторы org.junit.Assert.assertXXX, верно?

Редактировать 2: Чтобы изменить junit на другую версию, используйте это:

<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.8</version>
  <scope>test</scope>
</dependency>

Редактировать 3: У вас должно быть что-то подобное в тестовом пути к классам:

[DEBUG] Test Classpath :
[DEBUG]   /home/icyrock/java/prb/target/test-classes
[DEBUG]   /home/icyrock/java/prb/target/classes
[DEBUG]   /home/icyrock/.m2/repository/junit/junit/4.8/junit-4.8.jar
[DEBUG]   /home/icyrock/.m2/repository/org/slf4j/slf4j-api/1.6.1/slf4j-api-1.6.1.jar
[DEBUG]   /home/icyrock/.m2/repository/org/slf4j/slf4j-log4j12/1.6.1/slf4j-log4j12-1.6.1.jar
[DEBUG]   /home/icyrock/.m2/repository/log4j/log4j/1.2.16/log4j-1.2.16.jar

Редактировать 4: ОК, я только что создал тестовый проект с быстрым стартом mavenАртефакт, добавлены два модуля (также созданные с помощью артефакта быстрого старта), добавлена ​​версия Java для источника / цели и junit: junit: 4.8 зависимость только от родительского pom.Я изменил только один из тестов на JUnit4 (другой по умолчанию - JUnit3, это генерирует быстрый запуск), mvn clean test из родительской папки работал просто отлично.

Это, скорее всего, проблема с настройкой проекта - можетвы проверяете, что ваш проект подключен правильно (т.е. модули указывают на родителя, группа / артефакт / версии родительских / дочерних проектов верны).Единственное, что мне приходит в голову, это очистить ваш репозиторий maven (по крайней мере, org / apache / maven), но я сомневаюсь, что это поможет.

Возможно, было бы целесообразно протестировать более простой проект.

2 голосов
/ 31 июля 2015

Чтобы завершить вопрос icyrock.com. Если нет тестовых классов, скомпилированных для target / test-classes, проверьте ваш файл pom и убедитесь, что упаковка не 'pom'.

...