@SelectPackages не работает с Maven CLI

Я запускаю mvn clean package, и все остальные тесты выполняются, кроме набора тестов. Я запускаю тесты Junit 4 и 5 - выполняются тесты @Rules и тесты @RegisterExtension/@ExtendWith. Не знаю, почему пакет не запускается. Есть идеи?

Код следующий:

Тестирование

@SelectPackages("com.company.platform.test.suite")
@IncludeClassNamePatterns({"^.*Suite$"})
public class SuiteTest {
}

Тест вызывается SuiteTest

import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;

public class TestingSuite {
    @Test
    public void add_2_plus_1(){
        Assertions.assertThat(2 + 1).isEqualTo(3);
    }
}

Пом

        <junit-jupiter-engine.version>5.5.0</junit-jupiter-engine.version>
        <junit-platform-runner.version>1.5.0</junit-platform-runner.version>
        <!-- ellided -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>${junit-jupiter-engine.version}</version>
        </dependency>
        <dependency>
            <groupId>org.junit.vintage</groupId>
            <artifactId>junit-vintage-engine</artifactId>
            <version>${junit-jupiter-engine.version}</version>
        </dependency>
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-runner</artifactId>
            <version>${junit-platform-runner.version}</version>
        </dependency>
      <!-- ellided -->
      <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                 <version>2.22.1</version>
                <configuration>
                    <includes>
                        <include>**/*Test.java</include>
                    </includes>
                </configuration>
            </plugin>

Сведения о Maven, Java и ОС

mvn11 --version                                                                                                                                                                                                                          Sun Jul 21 14:43:24 EDT 2019
Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-17T14:33:14-04:00)
Maven home: /usr/local/Cellar/maven/3.5.4/libexec
Java version: 11.0.1, vendor: Oracle Corporation, runtime: /Users/me/Downloads/jdk-11.0.1.jdk/Contents/Home
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "10.14.5", arch: "x86_64", family: "mac"

Ваш класс набора фактически использует Junit4 для запуска тестов Junit5. Я думаю, вам нужна дополнительная зависимость от junit 4.12. Тем не менее, почему бы вам не использовать встроенную поддержку Junit5 в плагине maven surefire?

johanneslink 22.07.2019 15:06
@RunWith(JUnitPlatform.class) заставляет его работать на Junit4, если я его удалю, чтобы он запускал родной Junit5 - все равно не работает. Имейте в виду, что мои обычные тесты Junit4 работают, и мои тесты Junit5 тоже работают.
non sequitor 22.07.2019 18:35

В этом случае вы должны предоставить работающий, но минимальный пример, чтобы другие, например я, могли воспроизвести проблему и, надеюсь, решить ее.

johanneslink 22.07.2019 18:49

Добавлен последний сегмент кода, чтобы сделать его работоспособным

non sequitor 22.07.2019 20:28

Только что заметил, что я неправильно выразился в первом комментарии: функция пакета, использующая @RunWith(JUnitPlatform.class), доступна только для JUnit 4. Он был создан для обеспечения тестирования JUnit 5 без поддержки JUnit 5. Ничего подобного для JUnit 5 не существует. Что я имел в виду под встроенной поддержкой, так это просто запускать простые тестовые примеры Jupiter из коробки, что вы уже делаете.

johanneslink 23.07.2019 14:37

Да, я добавил @RunWith(JUnitPlatform.class), потому что "из коробки" он не запускался - и это тоже не помогло.

non sequitor 23.07.2019 14:40
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
6
788
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поэтому я воспроизвел вашу проблему. При работе

mvn clean test

я получил следующий вывод (среди многих других):

Juli 23, 2019 8:17:30 VORM. org.junit.vintage.engine.discovery.DefensiveAllDefaultPossibilitiesBuilder$DefensiveAnnotatedBuilder buildRunner
WARNING: Ignoring test class using JUnitPlatform runner: com.example.project.SuiteTest

Вот почему я посмотрел код DefensiveAllDefaultPossibilitiesBuilder$DefensiveAnnotatedBuilder и нашел следующий комментарий:

/**
 * Customization of {@link AnnotatedBuilder} that ignores classes annotated
 * with {@code @RunWith(JUnitPlatform.class)} to avoid infinite recursion.
 */
private static class DefensiveAnnotatedBuilder extends AnnotatedBuilder {...}

Это убедительно свидетельствует о том, что наборы, использующие @RunWith(JUnitPlatform.class), игнорируются при прогоне через механизм платформы. Вы можете спросить команду junit 5, есть ли явный способ отключить этот механизм безопасности, но я думаю, что его нет.

Я предлагаю вам расширить конфигурацию maven-surefire-plugin, чтобы имитировать то, что вы делаете в пакете:

@SelectPackages("com.company.platform.test.suite")
@IncludeClassNamePatterns({"^.*Suite$"})

можно перевести во что-то вроде

<include>com.company.platform.test.suite/*Suite.java</include>

Хотя я не тестировал.

Что произойдет, если вы запустите его без @RunWith(JUnitPlatform.class) - что я в конечном итоге и пытаюсь сделать?

non sequitor 23.07.2019 14:37

Ничего не произошло. Это бегун JUnitPlatform, который подбирает другие аннотации. Без бегуна класс просто игнорируется. В Юпитере нет функции набора.

johanneslink 23.07.2019 22:02

Но я не использую org.junit.runners.Suite, класс называется Люкс, но это обычный класс. Почему Junit5, который запускает другие тесты, отмеченные org.junit.jupiter.api.Test, не просто запускается. У вас ничего не происходит, у меня тоже ничего не происходит - так почему это происходит только для @SelectPackages?

non sequitor 24.07.2019 04:06

Не уверен, что вы меня троллите или я действительно настолько непонятен. Создание наборов тестов с аннотациями, такими как @SelectPackages и т. д., не поддерживается Jupiter. Это не имеет ничего общего с классом org.junit.runners.Suite.

johanneslink 24.07.2019 06:57

Возможно, чтение этого закрытого выпуска Junit5 поможет избавиться от путаницы: github.com/junit-team/junit5/issues/1778

johanneslink 24.07.2019 08:06

Это интересно, я думал, что @SelectPackages была именно конструкцией Юпитера/Junit5, которая заменила Suite. Ссылка, которую вы сказали, также ссылается на @RunWith(JUnitPlatform.class) - я думаю, что внес путаницу, добавив это в уравнение, но я думаю, что у меня достаточно, чтобы продолжить с вашего отзыва и ссылки - спасибо.

non sequitor 24.07.2019 15:14

Другие вопросы по теме