Мейвен не знаходить тести JUnit для запуску


416

У мене програма Maven, вона чудово складається. Коли я запускаю, mvn testвін не запускає жодних тестів (під заголовком TESTs йдеться There are no tests to run.).

Я відтворив цю проблему із надзвичайно простим налаштуванням, яке я включу нижче, а також висновком при запуску -X.

Одиничні тести добре спрацьовують від затемнення (як зі стандартним пакетом джуніту, так і тоді, коли я замість цього включаю 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] ------------------------------------------------------------------------

Відповіді:


667

За замовчуванням Maven використовує такі умови іменування під час пошуку тестів для запуску:

Якщо ваш тестовий клас не відповідає цим умовам, слід перейменувати його або налаштувати Maven Surefire Plugin для використання іншого шаблону для тестових класів.


4
Мені здається більш привабливим змінити конфігурацію maven. Ця угода про іменування створює певну небезпеку для недосвідченого користувача. Іменуючи ваші тестові корпуси на зразок SomethingTest1, SomethingTest2 призведе до того, що тести мовчки не будуть виконані. Maven не може цього зробити для зворотної сумісності, але робить більше логіки для пошуку тестів у всіх файлах.
Тобіас Кремер

8
Я ніколи цього не знав - було два випадки, які закінчилися "Тестами", і Мейвен відмовилася їх запускати ... змінила на "Тест", і все добре в гільдії льодяника знову. Дякую.
деманяк

2
@Tobias Я погоджуюся з вашою думкою щодо небезпеки, що виникає в результаті конвенції про іменування. Це свого роду також порушує шаблон, що має на увазі використання анотацій. Неявний результат використання анотацій полягає в тому, що в класах / методах, що мають конкретну анотацію, можна шукати. Я б сподівався, що Мейвен не встановив обмеження щодо іменного обмеження, а замість цього покладався лише на сканування @Test анотованих методів у будь-якому класі.
Ангад

2
Зверніть увагу , що документація безпомилкової Тепер стверджує , що **/*Tests.javaце за замовчуванням включає в себе!
Гарет

11
Запитання: То чому б анотувати за допомогою @test, якщо ви все-таки дотримуєтесь конвенції Test *?
dynex

88

Я також виявив, що тестовий код одиниці повинен бути розміщений під тестовою папкою, його не можна визнати тестовим класом, якщо ви помістите його під основну папку. напр.

Неправильно

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

Правильно

/my_program/src/test/java/MyTest.java

3
Таанк вам! Це і встановлення області тестування ( <scope>test<scope>) у pom.xmlфайлі зробило це для мене.
dinesharjani

Я наткнувся на це, стежте за тестами проти тесту. Правильним є тест
Bruck Wubete

72

Інша річ, яка може змусити Maven не знайти тестів, якщо упаковка модуля не буде оголошена правильно.

У недавньому випадку хтось мав <packaging>pom</packaging>і мої тести ніколи не проходили. Я змінив його <packaging>jar</packaging>і зараз він працює чудово.


4
Відмінна пропозиція! Демонструє небезпеку "копіювати-вставити" під час поділу одномодульного артефакту Maven на кілька.
morsor

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


Я отримую "не знайдено" для junit-platform-surefire-provider.
Arya 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>власність. Зайняв мене час, щоб знайти це.


13

Maven не запустить ваші тести, якщо проект є <packaging>pom</packaging>

Вам потрібно встановити упаковку на банку (або якийсь інший тип артефакту Java) для запуску тестів: <packaging>jar</packaging>


12

У моєму випадку він додав junit-vintage-engine, що робить його сумісним із старішою версією тестів JUnit і може запускати їх. Оскільки я використовую JUnit 5.

<dependency>
        <groupId>org.junit.vintage</groupId>
        <artifactId>junit-vintage-engine</artifactId>
        <scope>test</scope>
</dependency>

Я думаю, що SpringBoot включає лише те, що використовує. Має сенс, що вам потрібно вказати свої залежності відповідно до ваших потреб. Інакше ви імпортуєте цілу купу бібліотек, якими ви не користуєтесь.
Duc Tran

12

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

Переконайтесь, що тестові класи та методи є загальнодоступними.

Моя проблема полягала в тому, що я використовував функцію автоматичного тестування класів / методів генерації моїх IDE (IntelliJ) і чомусь це створило їх як пакетне приватне. Я вважаю, що це пропустити легше, ніж можна було б очікувати.


1
З цією проблемою у мене також з'явилася причина, чому IntelliJ чомусь створює тести як пакетні приватні, і Maven не може їх побачити. Зміна класу та методу @Test на загальнодоступні виконавці виконують тести.
AlexC

Вирішив мою проблему! Зауважте, що це не стосується JUnit 5+. Я думаю, генератор коду IntelliJ передбачає, що ви використовуєте останню версію.
ламіно

@lamino Я використовував junit5, і це не вдалося, оскільки мій метод тестування був не загальнодоступним
SudhirKumar

Трохи нахабний від IntelliJ, щоб сказати мені, що методи можуть бути пакетно-приватними ..
Wecherowski

9

Переконайтеся, що (для jUnit - 4.12 та плагіну Eclipse surefire)

  1. Додайте потрібну версію jUnit в POM.xml залежно. У Maven -> Оновіть проект, щоб побачити необхідні банки, експортовані в проекті.
  2. Клас тестування знаходиться в папці src / test / java та підкаталогах цієї папки (або базову папку можна вказати в POM у конфігураційному тестіSourceDirectory). У назві класу повинно бути слово "Тест".
  3. Метод тестування в тестовому класі повинен мати анотацію @Test

1
Це скоріше проблема конфігурації Java, але окрім правильного іменування тестового класу та розміщення тестового файлу у тестовому каталозі під src, назва пакету тестового класу має відповідати назві пакета класу, який ви тестуєте.
Пол

2
@Paul False - Maven виконає всі класи, що відповідаютьsrc/test/java умовам згідно з . Конвенція про пакет призначена для структури та для тестування доступу до приватно-приватних методів.
Майкл К

9

Виявлений, якщо ви будете префіксувати тест із "Анотацією", він буде ігнорований за замовчуванням.


1
maven.apache.org/guides/getting-started `` `І за замовчуванням виключаються такі: * / Анотація Test.java * / Анотація 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() {

    }
}

4

Якщо у вас є спільна програма Java / Groovy, і все, що у вас є, є тести Groovy Unit, то Maven не знайде жодних тестів. Це можна виправити, додавши один тест одиниці в src / test / java.


4

Я також мав подібну проблему, після дослідження виявив, що залежність від тенґнгу викликає цю проблему. Після видалення залежності від тенду з пом (оскільки мені це більше не потрібно), воно почало добре працювати для мене.

    <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почав переглядати тести проекту.


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> 
...

2
/my_program/src/test/java/ClassUnderTestTests.java

має бути

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

Maven знаходить ці кінці Тест або починається з 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>

2

Я зіткнувся з тією ж проблемою, яку вирішено нижче зміною в pom.xml:

<build>
    <testSourceDirectory>test</testSourceDirectory>

...

змінено на:

<build>
    <testSourceDirectory>${project.basedir}/src/test/java</testSourceDirectory>

1

Зі мною трапилася ще одна причина не запуску тестових випадків - у мене було властивість під назвою "test" для зовсім інших цілей, але це заважало плагіну-перевірці. Таким чином, будь ласка, перевірте свої ПОМ на наявність:

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

і видаліть його.


1

Ще одна порада (крім попередніх відповідей):

У Eclipse перейдіть до Властивості вашого проекту> натисніть Run/Debug Settings:

"Ця сторінка дозволяє керувати конфігураціями запуску за допомогою вибраного ресурсу"

Там ви можете додати (New ...) або видалити (Delete) будь-які тести JU (JUnit) у вашому проекті (під src/test/javaпапкою чи курсом).


1

Якщо ви написали свої тести в JUnit 4 та додали залежність JUnit 5 до плагіна-підтвердження, ваші тести не працюватимуть.

У цьому випадку просто прокоментуйте залежність JUnit 5 від надійного плагіна:

        <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>

1

Після працював для мене просто чудово в 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, і він завжди показував Тестовий запуск: 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 не працюють під Maven link, врятував мені день.


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>

Коли я встановив джуніт, все працювало, я сподіваюся і допоможу в цьому:

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

0

я використовував цей код

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

на мій pom.xml, просто переконайтеся, що файл тесту в певному

<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.


0

Ще одна проблема, яку легко помітити - переконайтеся, що у файлі класу є розширення .java

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.