maven surefire-junit47 не запускает тесты JUnit4 - PullRequest
1 голос
/ 10 июля 2019

В проекте maven с большим количеством тестов JUnit 4, surefire-junit47 не выполняет тесты.

В этом проекте нет тестовых тестов, и в помпе нет тестовых тестов. Но этот проект зависит от другого проекта, в котором есть тестирование в pom. Вы можете увидеть его импортирование testng в выводе mvn -X ниже.

Для справки, вот документация, из которой я работаю: https://maven.apache.org/surefire/maven-surefire-plugin/examples/inclusion-exclusion.html

Вот несколько конфигураций pom, которые показывают проблему.

Учитывая организацию этого тестового класса:

- src/main/test/
   - com.mycomp.qc.core.account
     - CopyAccountTests.java
     - CreateAccountTests.java
     - DeleteAccountTests.java
     - ListAccountTests.java
     - ReadAccountTests.java
     - UpdateAccountTests.java
   - com.mycomp.qc.core.product
     - CopyProductTests.java
     - CreateProductTests.java
     - DeleteProductTests.java
     - ListProductTests.java
     - ReadProductTests.java
     - UpdateProductTests.java
   - ..... and 300 more packages .....

И учитывая эту структуру класса теста:

package com.mycomp.qc.core.account;

import org.junit.Assert;
import org.junit.Test;
.... and more ....

public class CopyAccountTests {

    @Test
    public void copyAccount1() {
        Assert.assertTrue("pass", true);
    }

    @Test
    public void copyAccount2() {
        Assert.assertTrue("fail", false);
    }

.... and more ....

}

pom config 1: Специально включить тесты учетной записи по шаблону

Запускает все тесты учетной записи, как указано в документации.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>${surefire.version}</version>
    <dependencies>
        <dependency>
            <groupId>org.apache.maven.surefire</groupId>
            <artifactId>surefire-junit47</artifactId>
            <version>${surefire.version}</version>
        </dependency>
    </dependencies>
    <configuration>
        <testFailureIgnore>true</testFailureIgnore>
        <includes>
            <include>*Account*</include>
        </includes>
        <threadCount>1</threadCount>
    </configuration>
    <executions>
        <execution>
            <id>default-test</id>
            <phase>test</phase>
            <goals>
                <goal>test</goal>
            </goals>
        </execution>
    </executions>
</plugin>

pom config 2: Специально включить тесты учетной записи по шаблону

Запускает все тесты учетной записи и продукта, как указано в документации.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>${surefire.version}</version>
    <dependencies>
        <dependency>
            <groupId>org.apache.maven.surefire</groupId>
            <artifactId>surefire-junit47</artifactId>
            <version>${surefire.version}</version>
        </dependency>
    </dependencies>
    <configuration>
        <testFailureIgnore>true</testFailureIgnore>
        <includes>
            <include>*Account*</include>
            <include>*Product*</include>
        </includes>
        <threadCount>1</threadCount>
    </configuration>
    <executions>
        <execution>
            <id>default-test</id>
            <phase>test</phase>
            <goals>
                <goal>test</goal>
            </goals>
        </execution>
    </executions>
</plugin>

pom config 3: Включить все тесты, основанные на верности по умолчанию

Находит и инициализирует тестовые классы, но не выполняет никаких методов @Test.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>${surefire.version}</version>
    <dependencies>
        <dependency>
            <groupId>org.apache.maven.surefire</groupId>
            <artifactId>surefire-junit47</artifactId>
            <version>${surefire.version}</version>
        </dependency>
    </dependencies>
    <configuration>
        <testFailureIgnore>true</testFailureIgnore>
        <threadCount>1</threadCount>
    </configuration>
    <executions>
        <execution>
            <id>default-test</id>
            <phase>test</phase>
            <goals>
                <goal>test</goal>
            </goals>
        </execution>
    </executions>
</plugin>

pom config 4: Включить все тесты по шаблону

Находит и инициализирует тестовые классы, но не выполняет никаких методов @Test.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>${surefire.version}</version>
    <dependencies>
        <dependency>
            <groupId>org.apache.maven.surefire</groupId>
            <artifactId>surefire-junit47</artifactId>
            <version>${surefire.version}</version>
        </dependency>
    </dependencies>
    <configuration>
        <testFailureIgnore>true</testFailureIgnore>
        <includes>
            <include>*Test*</include>
        </includes>
        <threadCount>1</threadCount>
    </configuration>
    <executions>
        <execution>
            <id>default-test</id>
            <phase>test</phase>
            <goals>
                <goal>test</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Что я пробовал:

  1. Очевидно, из примеров я пробовал разные шаблоны включения в pom. См. Результаты, изложенные выше.

  2. Настроен новый проект со всем тем же импортом и несколькими небольшими тестами. Все приведенные выше шаблоны включения вели себя так, как описано в документации.

  3. Переключен верный провайдер на surefire-junit4. Это фактически выполнило все тесты, но мы столкнулись с другими проблемами.

  4. Запуск mvn -X, в основном для поиска проблем тестирования, на основе этого ответа: Surefire не запускает тесты Junit 4 .

  5. mvn -X показал, что плагин maven-resources-default по умолчанию загружает в junit 3.8.x, что, как говорит док, может вызвать проблемы. Обновлены ресурсы до 3.1.0, но это не решило мою проблему.

MNV -X выход

Слишком большой, чтобы включить. Если вы хотите часть этого, пожалуйста, спросите.

1 Ответ

0 голосов
/ 18 июля 2019

Оказывается, что на самом деле Maven выполняет тесты.Причина, по которой я думал, что тесты не выполнялись, из-за изменений в том, как JunitCore () работает в 4.7 +.

Похоже, что junit4 обрабатывает класс статики тестового класса (и статические методы @Parameters) классом, гдеjunit47 обрабатывает всю статику, затем запускает все тесты.Таким образом, вы получите:

junit4
- ClassA
  - staticField1
  - staticMethod1
  - testMethod1
- ClassB
  - staticField2
  - staticMethod2
  - testMethod2


junit47
- Initialize:
  - ClassA
    - staticField1
    - staticMethod1
  - ClassB
    - staticField2
    - staticMethod2
- ClassA
  - testMethod1
- ClassB
  - testMethod2

Подробнее об этом от того, кто понимает это лучше меня, в этой теме: https://issues.apache.org/jira/browse/SUREFIRE-1676?filter=-2

...