У меня есть программа Maven, она прекрасно компилируется. При запуске mvn test
он не запускает никаких тестов (под заголовком TESTs написано There are no tests to run.
).
Я воссоздал эту проблему с помощью супер простой настройки, которую я включу ниже, а также вывод при запуске с -X
.
Модульные тесты работают нормально из eclipse (как с его пакетом junit по умолчанию, так и с тем, когда я вместо этого включаю junit.jar, загруженный maven). Также mvn test-compile
правильно создает класс под тест-классами. Я запускаю это на OSX 10.6.7 с Maven 3.0.2 и Java 1.6.0_24.
Вот структура каталогов:
/my_program/pom.xml
/my_program/src/main/java/ClassUnderTest.java
/my_program/src/test/java/ClassUnderTestTests.java
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>my_group</groupId>
<artifactId>my_program</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>My Program</name>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
ClassUnderTest.java:
public class ClassUnderTest {
public int functionUnderTest(int n) {
return n;
}
}
ClassUnderTestTests.java:
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
public class ClassUnderTestTests {
private ClassUnderTest o;
@Before
public void setUp() {
o = new ClassUnderTest();
}
@Test
public void testFunctionUnderTest_testCase1() {
Assert.assertEquals(1, o.functionUnderTest(1));
}
@Test
public void testFunctionUnderTest_testCase2() {
Assert.assertEquals(2, o.functionUnderTest(2));
}
}
Конец теста mvn -X:
[DEBUG] Configuring mojo org.apache.maven.plugins:maven-surefire-plugin:2.7.1:test from plugin realm ClassRealm[plugin>org.apache.maven.plugins:maven-surefire-plugin:2.7.1, parent: sun.misc.Launcher$AppClassLoader@5224ee]
[DEBUG] Configuring mojo 'org.apache.maven.plugins:maven-surefire-plugin:2.7.1:test' with basic configurator -->
[DEBUG] (s) basedir = /Users/aaron/Programs/my_program
[DEBUG] (s) childDelegation = false
[DEBUG] (s) classesDirectory = /Users/aaron/Programs/my_program/target/classes
[DEBUG] (s) disableXmlReport = false
[DEBUG] (s) enableAssertions = true
[DEBUG] (s) forkMode = once
[DEBUG] (s) junitArtifactName = junit:junit
[DEBUG] (s) localRepository = id: local
url: file:///Users/aaron/.m2/repository/
layout: none
[DEBUG] (f) parallelMavenExecution = false
[DEBUG] (s) pluginArtifactMap = {org.apache.maven.plugins:maven-surefire-plugin=org.apache.maven.plugins:maven-surefire-plugin:maven-plugin:2.7.1:, org.apache.maven.surefire:surefire-booter=org.apache.maven.surefire:surefire-booter:jar:2.7.1:compile, org.apache.maven.surefire:surefire-api=org.apache.maven.surefire:surefire-api:jar:2.7.1:compile, org.apache.maven.surefire:maven-surefire-common=org.apache.maven.surefire:maven-surefire-common:jar:2.7.1:compile, org.apache.maven.shared:maven-common-artifact-filters=org.apache.maven.shared:maven-common-artifact-filters:jar:1.3:compile, org.codehaus.plexus:plexus-utils=org.codehaus.plexus:plexus-utils:jar:2.0.5:compile, junit:junit=junit:junit:jar:3.8.1:compile, org.apache.maven.reporting:maven-reporting-api=org.apache.maven.reporting:maven-reporting-api:jar:2.0.9:compile}
[DEBUG] (s) printSummary = true
[DEBUG] (s) project = MavenProject: my_group:my_program:1.0-SNAPSHOT @ /Users/aaron/Programs/my_program/pom.xml
[DEBUG] (s) projectArtifactMap = {junit:junit=junit:junit:jar:4.8.1:test}
[DEBUG] (s) redirectTestOutputToFile = false
[DEBUG] (s) remoteRepositories = [ id: central
url: http://repo1.maven.org/maven2
layout: default
snapshots: [enabled => false, update => daily]
releases: [enabled => true, update => never]
]
[DEBUG] (s) reportFormat = brief
[DEBUG] (s) reportsDirectory = /Users/aaron/Programs/my_program/target/surefire-reports
[DEBUG] (s) session = org.apache.maven.execution.MavenSession@dfbb43
[DEBUG] (s) skip = false
[DEBUG] (s) skipTests = false
[DEBUG] (s) testClassesDirectory = /Users/aaron/Programs/my_program/target/test-classes
[DEBUG] (s) testFailureIgnore = false
[DEBUG] (s) testNGArtifactName = org.testng:testng
[DEBUG] (s) testSourceDirectory = /Users/aaron/Programs/my_program/src/test/java
[DEBUG] (s) trimStackTrace = true
[DEBUG] (s) useFile = true
[DEBUG] (s) useManifestOnlyJar = true
[DEBUG] (s) workingDirectory = /Users/aaron/Programs/my_program
[DEBUG] -- end configuration --
[INFO] Surefire report directory: /Users/aaron/Programs/my_program/target/surefire-reports
[DEBUG] Setting system property [user.dir]=[/Users/aaron/Programs/my_program]
[DEBUG] Setting system property [localRepository]=[/Users/aaron/.m2/repository]
[DEBUG] Setting system property [basedir]=[/Users/aaron/Programs/my_program]
[DEBUG] Using JVM: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/java
[DEBUG] Using manager EnhancedLocalRepositoryManager with priority 10 for /Users/aaron/.m2/repository
[DEBUG] dummy:dummy:jar:1.0 (selected for null)
[DEBUG] org.apache.maven.surefire:surefire-booter:jar:2.7.1:compile (selected for compile)
[DEBUG] org.apache.maven.surefire:surefire-api:jar:2.7.1:compile (selected for compile)
[DEBUG] Adding to surefire booter test classpath: /Users/aaron/.m2/repository/org/apache/maven/surefire/surefire-booter/2.7.1/surefire-booter-2.7.1.jar Scope: compile
[DEBUG] Adding to surefire booter test classpath: /Users/aaron/.m2/repository/org/apache/maven/surefire/surefire-api/2.7.1/surefire-api-2.7.1.jar Scope: compile
[DEBUG] Using manager EnhancedLocalRepositoryManager with priority 10 for /Users/aaron/.m2/repository
[DEBUG] dummy:dummy:jar:1.0 (selected for null)
[DEBUG] org.apache.maven.surefire:surefire-junit4:jar:2.7.1:test (selected for test)
[DEBUG] org.apache.maven.surefire:surefire-api:jar:2.7.1:test (selected for test)
[DEBUG] Adding to surefire test classpath: /Users/aaron/.m2/repository/org/apache/maven/surefire/surefire-junit4/2.7.1/surefire-junit4-2.7.1.jar Scope: test
[DEBUG] Adding to surefire test classpath: /Users/aaron/.m2/repository/org/apache/maven/surefire/surefire-api/2.7.1/surefire-api-2.7.1.jar Scope: test
[DEBUG] Test Classpath :
[DEBUG] /Users/aaron/Programs/my_program/target/test-classes
[DEBUG] /Users/aaron/Programs/my_program/target/classes
[DEBUG] /Users/aaron/.m2/repository/junit/junit/4.8.1/junit-4.8.1.jar
[DEBUG] Using manager EnhancedLocalRepositoryManager with priority 10 for /Users/aaron/.m2/repository
[DEBUG] dummy:dummy:jar:1.0 (selected for null)
[DEBUG] org.apache.maven.surefire:surefire-booter:jar:2.7.1:compile (selected for compile)
[DEBUG] org.apache.maven.surefire:surefire-api:jar:2.7.1:compile (selected for compile)
[DEBUG] Adding to surefire booter test classpath: /Users/aaron/.m2/repository/org/apache/maven/surefire/surefire-booter/2.7.1/surefire-booter-2.7.1.jar Scope: compile
[DEBUG] Adding to surefire booter test classpath: /Users/aaron/.m2/repository/org/apache/maven/surefire/surefire-api/2.7.1/surefire-api-2.7.1.jar Scope: compile
Forking command line: /bin/sh -c cd /Users/aaron/Programs/my_program && /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/java -jar /Users/aaron/Programs/my_program/target/surefire/surefirebooter6118081963679415631.jar /Users/aaron/Programs/my_program/target/surefire/surefire4887918564882595612tmp /Users/aaron/Programs/my_program/target/surefire/surefire9012255138269731406tmp
-------------------------------------------------------
T E S T S
-------------------------------------------------------
There are no tests to run.
Results :
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.089s
[INFO] Finished at: Mon May 30 12:03:09 EDT 2011
[INFO] Final Memory: 7M/62M
[INFO] ------------------------------------------------------------------------
**/*Tests.java
это включает по умолчанию!Я также обнаружил, что код модульного теста должен быть помещен в папку test, он не может быть распознан как тестовый класс, если вы поместите его в основную папку. например.
Неправильно
Правильно
источник
<scope>test<scope>
) вpom.xml
файле сделали это для меня.Еще одна вещь, которая может привести к тому, что Maven не найдет тесты, если упаковка модуля объявлена неправильно.
В недавнем случае кто-то имел,
<packaging>pom</packaging>
и мои тесты никогда не запускались. Я изменил его на<packaging>jar</packaging>
и теперь он работает нормально.источник
package type is pom - so not running tests
- чтобы дать некоторую подсказку разработчикам :(ОБНОВИТЬ:
Как сказал @scottyseus в комментариях, начиная с Maven Surefire 2.22.0, достаточно следующего:
При использовании JUnit 5 я столкнулся с той же проблемой. Maven Surefire нужен плагин для запуска тестов JUnit 5. Добавьте это к нашему
pom.xml
:Источник: https://junit.org/junit5/docs/current/user-guide/#running-tests-build-maven.
источник
junit-platform-surefire-provider
.surefire-provider
илиjupiter-engine
. По крайней мере, мои тесты без них работают нормально. увидеть этот ответ .org.junit.jupiter.api.Test
вместоorg.junit.Test
этого плагина, иначе тесты не будут найдены.Также проверьте, соответствует ли каталог ваших тестовых классов (например, src / test / java) каталогу, указанному в свойстве
<testSourceDirectory>
вашего pom.xml в<build>
свойстве. Мне понадобилось время, чтобы найти это.источник
Maven не будет запускать ваши тесты, если проект
<packaging>pom</packaging>
Вам нужно установить упаковку в jar (или другой тип java-артефакта) для запуска тестов:
<packaging>jar</packaging>
источник
В моем случае это было добавление junit-vintage-engine, которое делает его совместимым со старыми версиями тестов JUnit и может их запускать. Как я использую JUnit 5.
источник
Многие из этих ответов были довольно полезны для меня в прошлом, но я хотел бы добавить дополнительный сценарий, который стоил мне времени, так как он может помочь другим в будущем:
Убедитесь, что тестовые классы и методы общедоступны.
Моя проблема заключалась в том, что я использовал функцию автоматической генерации тестовых классов / методов в моей IDE (IntelliJ) и по какой-то причине он создал их как закрытые для пакета. Я считаю, что это легче пропустить, чем можно было бы ожидать.
источник
Проверьте это (для jUnit - 4.12 и подключаемого модуля Eclipse)
источник
src/test/java
условию . Соглашение о пакете относится к структуре и разрешает доступ тестов к закрытым методам пакета.Обнаруженный, если вы добавите в тест префикс «Abstract», он будет по умолчанию игнорироваться.
источник
*/TestAbstractSomeClassName.java
.Я борюсь с этой проблемой. В моем случае я не импортировал правильный @Test аннотацию .
1) Проверьте, является ли @Test от org.junit.jupiter.api.Test (если вы используете Junit 5).
2) С Junit5 вместо
@RunWith(SpringRunner.class)
, используйте@ExtendWith(SpringExtension.class)
источник
Если у вас есть общее Java / Groovy-приложение, и все, что у вас есть, это юнит-тесты Groovy, то Maven не найдет никаких тестов. Это можно исправить, добавив один модульный тест в src / test / java.
источник
У меня также была похожая проблема, после изучения которой я обнаружил, что зависимость от testng вызывает эту проблему. После удаления зависимости testng от pom (как мне это больше не нужно), он начал работать нормально для меня.
источник
Если вы создали
Spring Boot
приложение с помощью Spring Initializr , тесты выполняются правильно из Intellij Idea. Но, если попытаться запустить тесты из командной строки:Вы могли быть удивлены, что никакие тесты не были выполнены вообще. Я пытался добавить
surefire plugin
без удачи. Ответ был прост:pom.xml
содержал следующую зависимость:Исключение,
junit-vintage-engine
предназначено для сохранения обратной совместимости сJUnit 4.x
. Таким образом, новые версии Spring Boot Initializr не поддерживают его по умолчанию. После того как я снял исключение,Maven
начал видеть тесты проекта.источник
Если имя вашего класса теста не соответствует стандартному соглашению об именах (как выделено @axtavt выше), вам нужно добавить имя шаблона / класса в
pom.xml
, чтобы Maven выбрал тест -источник
должно быть
Maven находит эти концы Test или запускается с Test для автоматического запуска.
Тем не менее, вы можете использовать
запустить ваши тесты.
источник
Вот точный код, который мне пришлось добавить в мой pom.xml:
И вот мои зависимости:
источник
Я столкнулся с той же проблемой, она решена с помощью изменения ниже в pom.xml:
...
изменился на:
источник
Со мной произошла еще одна причина не запускать тестовые случаи - у меня было свойство с именем «test» для совершенно разных целей, но оно мешало плагину surefire. Таким образом, пожалуйста, проверьте ваши POM для:
и удали его.
источник
Еще один совет (в дополнение к предыдущим ответам):
В Eclipse перейдите в Свойства вашего проекта> нажмите
Run/Debug Settings
:Там вы можете добавить (Новый ...) или удалить (Удалить) любые тесты JU (JUnit), которые есть в вашем проекте (в
src/test/java
папке или в курсе).источник
Если вы написали свои тесты в JUnit 4 и добавили зависимости JUnit 5 в плагин surefire, ваши тесты не будут выполняться.
В этом случае просто прокомментируйте зависимости JUnit 5 от плагина surefire:
источник
Следующее сработало просто отлично для меня в Junit 5
https://junit.org/junit5/docs/current/user-guide/#running-tests-build-maven
источник
В моем случае мы переносим мультимодульное приложение на Spring Boot. К сожалению, maven не выполнил все тесты в модулях. Наименование тестовых классов не изменилось, мы соблюдаем соглашения об именах.
В конце это помогло, когда я добавил зависимость
surefire-junit47
в плагинmaven-surefire-plugin
. Но я не мог объяснить, почему, это было методом проб и ошибок:источник
Я запускал тестовые примеры Junit-5 с maven 3.6.2, и он всегда показывал Test run: 0
[
Тесты Junt-5 не запускаются по мавенской ссылке, спас мне день.
источник
junitArtifactName
также может иметь место, если используемый JUnit не является стандартным (junit:junit
), а, например, ...источник
Если кто-то искал, а я не решил, у меня была библиотека для разных тестов:
Когда я установил junit, все заработало, я надеюсь и помогу этому:
источник
я использовал, используя этот код
на мой pom.xml, просто убедитесь, что testng файл в конкретном там
источник
Такая проблема может возникнуть, когда вы используете плагин surfire 3.x.x + с JUnit5 и по ошибке аннотируете тестовый класс
@Test
аннотацией из JUnit4.Используйте:
org.junit.jupiter.api.Test
(JUnit5) вместоorg.junit.Test
(Junit4)ПРИМЕЧАНИЕ: это может быть трудно заметить, так как IDE может запускать эту проблему без проблем, как тест JUnit4.
источник
Еще одна легко пропускаемая проблема - убедитесь, что файл вашего класса имеет расширение .java
источник