Рубрики
Без рубрики

Как правильно игнорировать Junit 4 в Gradle и Maven

Перейдите к лучшему примеру здесь для проблемы Gradle и Maven, в которой довольно много Java… С тегами тестирование, java, gradle.

Перейдите к лучшему примеру здесь для Gradle и Maven

Проблема

Довольно много зависимостей Java приводят Junit 4 или движок Junit vintage/| в качестве транзитивной зависимости.

А также движок Junit vintage/|предназначен для интеграции версий 4 и 5 , это позволяет использовать и то, и другое одновременно. Когда вы хотите окончательно мигрировать, это приводит к таким проблемам, как:

  • Проблемы во время выполнения: класс junit4 не найден
  • Тест выполнен, но покрытие не агрегировано
  • Использование не кратких аннотаций

Решение

Все эти проблемы имеют только одно правильное решение:

Используйте одну конкретную версию Junit для предотвращения введения в заблуждение и неправильного использования

Здесь я сосредоточусь на использовании последней версии Junit 5, следовательно, исключая Junit 4.

Один из вариантов – игнорировать эту зависимость от определенной зависимости:

testImplementation('org.springframework.boot:spring-boot-starter-test') {
    exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'  
}

    org.springframework.boot
    spring-boot-starter-test
    test
    
      
        org.junit.vintage
        junit-vintage-engine
      
    
  

Но , это требует, чтобы вы знали какая зависимость приносит вам неприятную зависимость. В этом случае вы можете использовать эту команду для отслеживания:

./gradlew dependencyInsight --dependency "junit:junit" --configuration "testCompileClasspath"

Другой вариант – исключить ненужные зависимости из всех конфигураций . Это приводит к другим проблемам, таким как: для некоторых библиотек все еще требуется Junit4/vintage. Но ошибки отражения компиляции/времени выполнения на самом деле только делают эти зависимости визуальными и помогают явно отметить | те модули Java, которые по-прежнему требуют по какой-либо причине работы с устаревшей библиотекой.

Сортировка:

Наличие конфигураций в градуировке легко исключить зависимость в одном конкретном месте:

/* for all the configurations */
configurations {
  all {
    /* only junit 5 should be used */
    exclude group: 'junit', module: 'junit'
    exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
  }
}
/* for a particular test module */
configurations {
  testCompile {
  /* only junit 5 should be used */
    exclude group: 'junit', module: 'junit'
    exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
  }
  testRuntime {
    /* only junit 5 should be used */
    exclude group: 'junit', module: 'junit'
    exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
  }
}

И не забудьте оставить комментарий на будущее!

Возобновиться

Надеюсь, эта заметка помогла игнорировать неприятную зависимость и сохранить контроль над конфигурацией сборки.

Оригинал: “https://dev.to/art_ptushkin/how-to-properly-ignore-junit-4-in-gradle-and-maven-3o82”