Maven не находит тесты JUnit для запуска

417

У меня есть программа 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] ------------------------------------------------------------------------
Zugwalt
источник

Ответы:

668

По умолчанию Maven использует следующие соглашения об именах при поиске тестов для запуска:

Если ваш тестовый класс не соответствует этим соглашениям, вы должны переименовать его или настроить плагин Maven Surefire для использования другого шаблона для тестовых классов.

axtavt
источник
4
Я считаю более привлекательным изменить конфиг maven. Это соглашение об именах представляет некоторую опасность для неопытного пользователя. Называя ваши тестовые случаи как SomethingTest1, SomethingTest2 приведет к тому, что тесты будут молча не выполняться. Maven не может сделать это для обратной совместимости, но он делает больше логики для поиска тестовых примеров во всех файлах.
Тобиас Кремер
8
Я никогда не знал этого - имел два случая, которые заканчивались «Тестами», и maven отказывался их запускать… менялся на «Тест», и все снова в гильдии леденцов. Спасибо.
Деманьяк
2
@Tobias Я согласен с вашей точкой зрения об опасности, налагаемой соглашением об именах. Это также нарушает схему, подразумеваемую использованием аннотаций. Неявный результат использования аннотаций заключается в том, что можно искать классы / методы, имеющие конкретную аннотацию. Я бы надеялся, что Maven не установил ограничение соглашения об именах и вместо этого полагался только на сканирование аннотированных методов @Test в любом классе.
Ангад
2
Обратите внимание, что верная документация теперь утверждает, что **/*Tests.javaэто включает по умолчанию!
Гарет
11
Вопрос: Так зачем комментировать @test, если вы все равно должны соблюдать соглашение Test *?
Дайнкс
88

Я также обнаружил, что код модульного теста должен быть помещен в папку test, он не может быть распознан как тестовый класс, если вы поместите его в основную папку. например.

Неправильно

/my_program/src/main/java/NotTest.java

Правильно

/my_program/src/test/java/MyTest.java
Робин Ма
источник
3
Thaaank вас! Это и установка диапазона для test ( <scope>test<scope>) в pom.xmlфайле сделали это для меня.
Динешарджани
Я столкнулся с этим, следите за тестами против теста.
Подходящий
72

Еще одна вещь, которая может привести к тому, что Maven не найдет тесты, если упаковка модуля объявлена ​​неправильно.

В недавнем случае кто-то имел, <packaging>pom</packaging>и мои тесты никогда не запускались. Я изменил его на <packaging>jar</packaging>и теперь он работает нормально.

Джон
источник
4
Отличное предложение! Демонстрирует опасность 'copy-paste' при разделении артефакта Maven с одним модулем на несколько.
Морсор
4
Я бы хотел, чтобы Мэйвен напечатал сообщение - package type is pom - so not running tests- чтобы дать некоторую подсказку разработчикам :(
Арун Аванатан
60

ОБНОВИТЬ:

Как сказал @scottyseus в комментариях, начиная с Maven Surefire 2.22.0, достаточно следующего:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.22.1</version>
</plugin>

При использовании JUnit 5 я столкнулся с той же проблемой. Maven Surefire нужен плагин для запуска тестов JUnit 5. Добавьте это к нашему pom.xml:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.21.0</version>
    <dependencies>
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-surefire-provider</artifactId>
            <version>1.2.0-M1</version>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.2.0-M1</version>
        </dependency>
    </dependencies>
</plugin>

Источник: https://junit.org/junit5/docs/current/user-guide/#running-tests-build-maven.

teyzer
источник
Я получаю "не найден" для junit-platform-surefire-provider.
Арья Pourtabatabaie
2
Обратите внимание, что в Surefire 2.22 нет необходимости добавлять зависимости от артефактов surefire-providerили jupiter-engine. По крайней мере, мои тесты без них работают нормально. увидеть этот ответ .
Скоттиссей
Также стоит отметить, что вы должны использовать org.junit.jupiter.api.Testвместо org.junit.Testэтого плагина, иначе тесты не будут найдены.
austin_ce
30

Также проверьте, соответствует ли каталог ваших тестовых классов (например, src / test / java) каталогу, указанному в свойстве <testSourceDirectory>вашего pom.xml в <build>свойстве. Мне понадобилось время, чтобы найти это.

t3rmin41
источник
13

Maven не будет запускать ваши тесты, если проект <packaging>pom</packaging>

Вам нужно установить упаковку в jar (или другой тип java-артефакта) для запуска тестов: <packaging>jar</packaging>

robjwilkins
источник
12

В моем случае это было добавление junit-vintage-engine, которое делает его совместимым со старыми версиями тестов JUnit и может их запускать. Как я использую JUnit 5.

<dependency>
        <groupId>org.junit.vintage</groupId>
        <artifactId>junit-vintage-engine</artifactId>
        <scope>test</scope>
</dependency>
Дык тран
источник
Я думаю, что SpringBoot включает только то, что он использует. Имеет смысл указывать свои зависимости в соответствии с вашими потребностями. В противном случае вы будете импортировать целую кучу библиотек, которые вы не используете.
Дык Тран
12

Многие из этих ответов были довольно полезны для меня в прошлом, но я хотел бы добавить дополнительный сценарий, который стоил мне времени, так как он может помочь другим в будущем:

Убедитесь, что тестовые классы и методы общедоступны.

Моя проблема заключалась в том, что я использовал функцию автоматической генерации тестовых классов / методов в моей IDE (IntelliJ) и по какой-то причине он создал их как закрытые для пакета. Я считаю, что это легче пропустить, чем можно было бы ожидать.

Жоао Матос
источник
1
Это проблема, с которой я столкнулся, по какой-то причине IntelliJ создает тесты как частные пакеты, а Maven не может их видеть. Изменив класс и метод @Test на общедоступные, maven выполняет тесты.
AlexC
Решил мою проблему! Обратите внимание, что это не относится к JUnit 5+. Я предполагаю, что генератор кода IntelliJ предполагает, что вы используете последнюю версию.
Ламино
@lamino Я использовал junit5, и он потерпел неудачу, потому что мой метод тестирования не был общедоступным
SudhirKumar
Немного дерзко от IntelliJ, чтобы сказать мне, что методы могут быть
пакетно
9

Проверьте это (для jUnit - 4.12 и подключаемого модуля Eclipse)

  1. Добавьте требуемую версию jUnit в POM.xml в зависимости. Do Maven -> Обновить проект, чтобы увидеть необходимые jar-файлы, экспортированные в проект.
  2. Тестовый класс находится в папке src / test / java и подкаталогах этой папки (или базовая папка может быть указана в POM в config testSourceDirectory). Название класса должно иметь слово «Test».
  3. Тестовый метод в тестовом классе должен иметь аннотацию @Test
Митра
источник
1
Это скорее проблема конфигурации Java, но помимо правильного присвоения имени тестовому классу и помещения тестового файла в тестовый каталог в разделе src, имя пакета тестового класса должно совпадать с именем пакета тестируемого класса.
Пол
2
@Paul False - Maven выполнит все классы, соответствующиеsrc/test/java условию . Соглашение о пакете относится к структуре и разрешает доступ тестов к закрытым методам пакета.
Майкл К
9

Обнаруженный, если вы добавите в тест префикс «Abstract», он будет по умолчанию игнорироваться.

user1016765
источник
1
maven.apache.org/guides/getting-started `` `А из исключений по умолчанию: * / Abstract Test.java * / Abstract TestCase.java` ``
Антуан Мейер,
Это также, кажется, игнорирует */TestAbstractSomeClassName.java.
Коллин Кроулл
6

Я борюсь с этой проблемой. В моем случае я не импортировал правильный @Test аннотацию .

1) Проверьте, является ли @Test от org.junit.jupiter.api.Test (если вы используете Junit 5).

2) С Junit5 вместо @RunWith(SpringRunner.class), используйте@ExtendWith(SpringExtension.class)

import org.junit.jupiter.api.Test;

@ExtendWith(SpringExtension.class)
@SpringBootTest
@AutoConfigureMockMvc
@TestPropertySource(locations = "classpath:application.properties")    
public class CotacaoTest {
    @Test
    public void testXXX() {

    }
}
edubriguenti
источник
4

Если у вас есть общее Java / Groovy-приложение, и все, что у вас есть, это юнит-тесты Groovy, то Maven не найдет никаких тестов. Это можно исправить, добавив один модульный тест в src / test / java.

Брюс Шалвински
источник
4

У меня также была похожая проблема, после изучения которой я обнаружил, что зависимость от testng вызывает эту проблему. После удаления зависимости testng от pom (как мне это больше не нужно), он начал работать нормально для меня.

    <dependency>
        <groupId>org.testng</groupId>
        <artifactId>testng</artifactId>
        <version>6.8</version>
        <scope>test</scope>
    </dependency>
Раджеш Мадхаван
источник
4

Если вы создали Spring Bootприложение с помощью Spring Initializr , тесты выполняются правильно из Intellij Idea. Но, если попытаться запустить тесты из командной строки:

mvn clean test

Вы могли быть удивлены, что никакие тесты не были выполнены вообще. Я пытался добавить surefire pluginбез удачи. Ответ был прост: pom.xmlсодержал следующую зависимость:

     <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
           <exclusion>
              <groupId>org.junit.vintage</groupId>
              <artifactId>junit-vintage-engine</artifactId>
           </exclusion>
        </exclusions>
     </dependency>

Исключение, junit-vintage-engineпредназначено для сохранения обратной совместимости с JUnit 4.x. Таким образом, новые версии Spring Boot Initializr не поддерживают его по умолчанию. После того как я снял исключение, Mavenначал видеть тесты проекта.

Exterminator13
источник
3

Если имя вашего класса теста не соответствует стандартному соглашению об именах (как выделено @axtavt выше), вам нужно добавить имя шаблона / класса в pom.xml, чтобы Maven выбрал тест -

...
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <includes>
                    <include>**/*_UT.java</include>
                </includes>
            </configuration>
        </plugin>
    </plugins>
</build> 
...
Saikat
источник
2
/my_program/src/test/java/ClassUnderTestTests.java

должно быть

/my_program/src/test/java/ClassUnderTestTest.java

Maven находит эти концы Test или запускается с Test для автоматического запуска.

Тем не менее, вы можете использовать

mvn surefire:test -Dtest=ClassUnderTestTests.java 

запустить ваши тесты.

Борис З.
источник
2

Вот точный код, который мне пришлось добавить в мой pom.xml:

    <build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.21.0</version>
            <dependencies>
                <dependency>
                    <groupId>org.junit.platform</groupId>
                    <artifactId>junit-platform-surefire-provider</artifactId>
                    <version>1.2.0-M1</version>
                </dependency>
                <dependency>
                    <groupId>org.junit.jupiter</groupId>
                    <artifactId>junit-jupiter-engine</artifactId>
                    <version>5.2.0</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

И вот мои зависимости:

    <dependencies>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>5.2.0</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.easytesting</groupId>
        <artifactId>fest-assert-core</artifactId>
        <version>2.0M10</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.junit.platform</groupId>
        <artifactId>junit-platform-surefire-provider</artifactId>
        <version>1.2.0-M1</version>
    </dependency>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <version>5.2.0-M1</version>
    </dependency>
</dependencies>
anon58192932
источник
2

Я столкнулся с той же проблемой, она решена с помощью изменения ниже в pom.xml:

<build>
    <testSourceDirectory>test</testSourceDirectory>

...

изменился на:

<build>
    <testSourceDirectory>${project.basedir}/src/test/java</testSourceDirectory>
ShayneR
источник
1

Со мной произошла еще одна причина не запускать тестовые случаи - у меня было свойство с именем «test» для совершенно разных целей, но оно мешало плагину surefire. Таким образом, пожалуйста, проверьте ваши POM для:

<properties>
  <test>.... </test>
  ...
</properties>

и удали его.

Руси Попов
источник
1

Еще один совет (в дополнение к предыдущим ответам):

В Eclipse перейдите в Свойства вашего проекта> нажмите Run/Debug Settings:

«Эта страница позволяет вам управлять конфигурациями запуска с текущим выбранным ресурсом»

Там вы можете добавить (Новый ...) или удалить (Удалить) любые тесты JU (JUnit), которые есть в вашем проекте (в src/test/javaпапке или в курсе).

datv
источник
1

Если вы написали свои тесты в JUnit 4 и добавили зависимости JUnit 5 в плагин surefire, ваши тесты не будут выполняться.

В этом случае просто прокомментируйте зависимости JUnit 5 от плагина surefire:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.19.1</version>
            <!--<dependencies>-->
                <!--<dependency>-->
                    <!--<groupId>org.junit.platform</groupId>-->
                    <!--<artifactId>junit-platform-surefire-provider</artifactId>-->
                    <!--<version>1.0.0</version>-->
                <!--</dependency>-->
                <!--<dependency>-->
                    <!--<groupId>org.junit.jupiter</groupId>-->
                    <!--<artifactId>junit-jupiter-engine</artifactId>-->
                    <!--<version>${junit.version}</version>-->
                <!--</dependency>-->
            <!--</dependencies>-->
        </plugin>
youhans
источник
1

Следующее сработало просто отлично для меня в Junit 5

https://junit.org/junit5/docs/current/user-guide/#running-tests-build-maven

<build>
    <plugins>
        <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.22.0</version>
        </plugin>
        <plugin>
            <artifactId>maven-failsafe-plugin</artifactId>
            <version>2.22.0</version>
        </plugin>
    </plugins>
</build>
<!-- ... -->
<dependencies>
    <!-- ... -->
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>5.4.0</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <version>5.4.0</version>
        <scope>test</scope>
    </dependency>
    <!-- ... -->
</dependencies>
<!-- ... -->
А.С. Ранджан
источник
1

В моем случае мы переносим мультимодульное приложение на Spring Boot. К сожалению, maven не выполнил все тесты в модулях. Наименование тестовых классов не изменилось, мы соблюдаем соглашения об именах.

В конце это помогло, когда я добавил зависимость surefire-junit47в плагин maven-surefire-plugin. Но я не мог объяснить, почему, это было методом проб и ошибок:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<dependencies>
  <dependency>
    <groupId>org.apache.maven.surefire</groupId>
    <artifactId>surefire-junit47</artifactId>
    <version>${maven-surefire-plugin.version}</version>
  </dependency>
</dependencies>

Майкл Хегнер
источник
1

Я запускал тестовые примеры Junit-5 с maven 3.6.2, и он всегда показывал Test run: 0

[

INFO] 
[INFO] Results:
[INFO] 
[INFO] Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  8.547 s
[INFO] Finished at: 2019-12-22T00:03:37-08:00
[INFO] ------------------------------------------------------------------------

Тесты Junt-5 не запускаются по мавенской ссылке, спас мне день.

Виджай Кумар Раджпут
источник
0

junitArtifactNameтакже может иметь место, если используемый JUnit не является стандартным ( junit:junit), а, например, ...

<dependency>
    <groupId>org.eclipse.orbit</groupId>
    <artifactId>org.junit</artifactId>
    <version>4.11.0</version>
    <type>bundle</type>
    <scope>test</scope>
</dependency>
Туомас Кивиахо
источник
0

Если кто-то искал, а я не решил, у меня была библиотека для разных тестов:

<dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>${org.junit.jupiter.version}</version>
        <scope>test</scope>
    </dependency>

Когда я установил junit, все заработало, я надеюсь и помогу этому:

<dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <scope>test</scope>
    </dependency>
hizmarck
источник
0

я использовал, используя этот код

<sourceDirectory>src_controller</sourceDirectory>
  <testSourceDirectory>src_test</testSourceDirectory>

на мой pom.xml, просто убедитесь, что testng файл в конкретном там

<suiteXmlFile>/Users/mac/xxx/xxx/xx.xxxx.xx/xxx.restassured.xx/testng.xml</suiteXmlFile>
Прасето Буди
источник
0

Такая проблема может возникнуть, когда вы используете плагин surfire 3.x.x + с JUnit5 и по ошибке аннотируете тестовый класс @Testаннотацией из JUnit4.

Используйте: org.junit.jupiter.api.Test(JUnit5) вместоorg.junit.Test (Junit4)

ПРИМЕЧАНИЕ: это может быть трудно заметить, так как IDE может запускать эту проблему без проблем, как тест JUnit4.

walkeros
источник
0

Еще одна легко пропускаемая проблема - убедитесь, что файл вашего класса имеет расширение .java

Марк W
источник