Включение утверждений в Gradle/JUnit

В моем проекте используется gradle и JUnit 5.01. Утверждения JUnit работают нормально. Однако мои обычные утверждения Java в самом тестируемом коде не срабатывают. Я ожидаю, что неудачное утверждение вызовет AssertionError, который будет пойман и сообщен JUnit.

Я нашел это: Как отключить утверждение в тесте gradle и так далее. создал этот build.gradle:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'org.junit.platform:junit-platform-gradle-plugin:1.0.2'
    }
}

apply plugin: 'java'
apply plugin: 'application'
apply plugin: 'maven'
apply plugin: 'org.junit.platform.gradle.plugin'

compileJava {
    options.compilerArgs += "-Xlint:unchecked"
}

tasks.withType(Test) {
    enableAssertions = true
}

repositories {
    mavenCentral()
}

dependencies {
    testCompile('org.junit.jupiter:junit-jupiter-api:5.0.1')
    testCompile('org.apiguardian:apiguardian-api:1.0.0')
    testRuntime('org.junit.jupiter:junit-jupiter-engine:5.0.1')
}

// Define the main class for the application
mainClassName = 'CMS'

jar {
    manifest {
        attributes 'Implementation-Title': 'CMS',
                   'Main-Class': 'com.brandli.cms.CMS'
    }
}

junitPlatform {
    filters {
        includeClassNamePattern '.*'
    }
}

test {
    testLogging {
        exceptionFormat = 'full'
    }
}

Что я делаю не так?


person Steve Brandli    schedule 09.01.2018    source источник
comment
Можете ли вы отладить свой тест и подтвердить, что выдается ошибка утверждения?   -  person Stefan Birkner    schedule 09.01.2018
comment
Да. Я помещаю assert false в место, где его нужно нажать. Я запустил код вне JUnit и запустил его с включенными утверждениями (-ea), и он попал в мое утверждение. Но запуск его с помощью JUnit (цель сборки gradle) не работает. (Позже в моем тесте он попадает в утверждение JUnit.) Итак, я знаю, что код запускается без включенных утверждений Java.   -  person Steve Brandli    schedule 09.01.2018


Ответы (1)


Копание в градиенте и много экспериментов привели меня к тому, что замена

tasks.withType(Test) {
    enableAssertions = true
}

с

junitPlatformTest {
    enableAssertions = true
}

сделал трюк. Я не знаю почему.

person Steve Brandli    schedule 09.01.2018
comment
JUnit 5 поддерживается через плагин, написанный командой JUnit, а не «изначально» Gradle (пока). Имея это в виду, то, что вы нашли, не так уж удивительно. Прежде чем будет реализована встроенная поддержка, возникнут некоторые проблемы. Как еще один пользователь Gradle, я надеюсь, что это произойдет раньше - person Kotse; 11.01.2018
comment
А для Kotlin DSL? - person Thufir; 26.12.2018