Maven/Surefire не находит тестов для запуска

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

Когда я запускаю "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)

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

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

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

Ответы

Ответ 1

Возможно, это проблема:

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

Изменить: я просто попробовал это в простом проекте и классе, указанном в приведенной выше ссылке, и он работал нормально. Я использовал 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 quickstart, добавил два модуля (также созданные с артефактом быстрого запуска) внутри, добавленную исходную/целевую версию Java и junit: junit: 4.8 зависимость только от родительской помпы. Я изменил только один из тестов на JUnit4 (другой по умолчанию JUnit3, что то, что генерирует быстрый запуск), mvn clean test из родительской папки работал нормально.

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

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

Ответ 2

Завершить вопрос icyrock.com. Если нет тестовых классов, скомпилированных для целевых/тестовых классов, тогда проверьте свой файл pom и убедитесь, что упаковка не является "pom".