По некоторым причинам я не могу заставить Знатока 2 Безошибочных плагина выполнять тестовый класс JUnit 4.
public class SimpleTest {
@org.junit.Test
public void simple() {
System.out.println("foo");
}
}
Однако, если я изменяю этот класс, чтобы быть JUnit-3 как, такой как
public class SimpleTest extends junit.framework.TestCase {
public void testBar() {
System.out.println("bar");
}
@org.junit.Test
public void simple() {
System.out.println("foo");
}
}
затем это выполняется. Вот то, что я сделал:
~/.m2/repository/org/apache/maven/surefire
- все они - любой версия 2.4.2 или 2.4.3mvn dependency:tree | grep junit
для обеспечения я только завишу от junit версии 4.7Модуль, в котором у меня есть эта проблема, не имеет тестов JUnit 3.
Есть ли что-либо еще, что я пропускаю?
mvn -X
помогло мне раскрыть следующее:
...
[INFO] [surefire:test {execution: default-test}]
[DEBUG] dummy:dummy:jar:1.0 (selected for null)
[DEBUG] org.apache.maven.surefire:surefire-booter:jar:2.4.3:runtime (selected for runtime)
[DEBUG] org.apache.maven.surefire:surefire-api:jar:2.4.3:runtime (selected for runtime)
[DEBUG] Adding to surefire booter test classpath: /home/mindas/.m2/repository/org/apache/maven/surefire/surefire-booter/2.4.3/surefire-booter-2.4.3.jar
[DEBUG] Adding to surefire booter test classpath: /home/mindas/.m2/repository/org/apache/maven/surefire/surefire-api/2.4.3/surefire-api-2.4.3.jar
[DEBUG] dummy:dummy:jar:1.0 (selected for null)
[DEBUG] org.testng:testng:jar:jdk15:5.8:test (selected for test)
[DEBUG] junit:junit:jar:3.8.1:test (selected for test)
[DEBUG] Adding to surefire booter test classpath: /home/mindas/.m2/repository/org/testng/testng/5.8/testng-5.8-jdk15.jar
[DEBUG] Adding to surefire booter test classpath: /home/mindas/.m2/repository/junit/junit/3.8.1/junit-3.8.1.jar
[DEBUG] dummy:dummy:jar:1.0 (selected for null)
[DEBUG] Retrieving parent-POM: org.apache.maven.surefire:surefire-providers:pom:2.4.3 for project: null:surefire-testng:jar:null from the repository.
[DEBUG] Adding managed dependencies for unknown:surefire-testng
[DEBUG] org.apache.maven.surefire:surefire-api:jar:2.4.3
[DEBUG] org.apache.maven.surefire:surefire-booter:jar:2.4.3
[DEBUG] org.codehaus.plexus:plexus-utils:jar:1.5.1
[DEBUG] org.apache.maven.surefire:surefire-testng:jar:2.4.3:test (selected for test)
[DEBUG] org.apache.maven:maven-artifact:jar:2.0:test (selected for test)
[DEBUG] org.codehaus.plexus:plexus-utils:jar:1.0.4:test (selected for test)
[DEBUG] junit:junit:jar:3.8.1:test (selected for test)
[DEBUG] org.testng:testng:jar:jdk15:5.7:test (selected for test)
[DEBUG] org.apache.maven.surefire:surefire-api:jar:2.4.3:test (selected for test)
...
[DEBUG] Test Classpath :
...
[DEBUG] /home/mindas/.m2/repository/junit/junit/4.7/junit-4.7.jar
Так что, похоже, проблема исходила из testng
jar, требующей JUnit v3.8.1. Несмотря на то, что Test Classpath
зависел от JUnit 4, было уже слишком поздно.
testng
зависимость находилась в моем POM:
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>5.8</version>
<scope>test</scope>
<classifier>jdk15</classifier>
</dependency>
Сразу после того, как я прокомментировал ее, тесты начали выполняться.
Уроки извлечены:
mvn зависимости:tree
не всегда достаточно, mvn -X
друг.Спасибо всем за помощь. К сожалению, нет способа разделить точки ответа между Паскалем и Калебом, но совет Калеба использовать mvn -X
помог мне встать на правильный путь, так что правильные точки ответа идут к нему.
Проверка, которую вы сделали, хороша, особенно проверка того, что вы используете версию 2. 3+ плагина surefire (по умолчанию вы получите версию 2.4.3 с maven 2.1 super POM, так что это должно быть нормально) и проверили, что вы не вытягиваете зависимость junit-3.8.1.jar
переходным способом.
Теперь, чтобы проверить, что это не "глобальная проблема" (я так не думаю TBH), не могли бы вы создать проект с нуля, например, запустив его:
mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=maven-junit4-testcase
Затем обновите junit-зависимость:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope>
</dependency>
И настройте уровень компилятора на 1.5+
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
Наконец, поместите ваш SimpleTest.java
рядом с AppTest.java
и запустите mvn test
.
Если запуск mvn теста
работает нормально для этого проекта (и я ожидаю, что он будет работать без проблем), не могли бы вы обновить свой вопрос с конфигурацией POM, которую вы используете (из проекта, у которого возникли проблемы)?
Я не знаю, что вы имеете в виду под "не могу выполнить", но помогает ли это явно установить включения, используемые maven-surefire-плагином
?
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.4.3</version>
<configuration>
<includes>
<include>**/*Test.java</include>
</includes>
</configuration>
</plugin>
Также, предоставляет ли запуск maven с флагом -X
какую-либо полезную информацию?
Настроили ли вы ваш maven-compile-plugin на корректный уровень компилятора, например:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
Иначе у maven возникнут проблемы с аннотациями
.