Запис під час тестування через Gradle


78

Під час тестування, здається, Gradle перенаправляє stdout / stderr на project_dir/build/reports/tests/index.html. Чи є спосіб уникнути цього переспрямування та замість цього надрукувати речі на консолі?

Додаткова інформація:

  • Це проект Scala 2.9.1.
  • Я використовую slf4s для реєстрації.

Відповіді:


97
apply plugin : 'java'

test {
    testLogging.showStandardStreams = true
}

http://gradle.org/docs/current/dsl/org.gradle.api.tasks.testing.Test.html

Для цього потрібна поточна версія gradle. Я припускаю, що тести Scala виконуються в рамках тестового завдання Java.


На жаль, при тестуванні, здається, ні, це видає для мене вихід: pastebin.com/PX8e1EKv edit: змініть println на друк, оскільки, на мою думку, подія фіксує новий рядок
Робі

Дякую. Я теж спробую це. У мене також є деякі оператори журналу у вихідних файлах. Як змусити їх надрукувати на консолі?
missingfaktor

Це залежить від здійснення журналювання. Можливо, slf4s за замовчуванням реєструє NOP і відкидає вашу заяву журналу. Чи є у вас банка для реалізації реєстратора на шляху тесту до класу? Якщо присутній slf4j-simple-1.6.4.jar, він буде реєструвати INFO і вище на STDERR. Якщо цього недостатньо, я додав би jar log і встановив logback-test.xml для додавання журналів до консолі.
Робі

Працював для мене з / Весна / Юніт
Дмитро Міньковський

Це "не працює", можливо, тому що тестове завдання вважається актуальним і не виконується, отже, ви не бачите вихідних даних. Ви можете або зробити, $ gradle clean testабо використовувати outputs.upToDateWhen {false}всередині testLoggingблоку ( test { testLogging { outputs...). Детальніше див. У документації .
Johnny Baloney

27

Я використовую також ( testLogging.exceptionFormat = 'full'):

test {
    testLogging.showStandardStreams = true
    testLogging.exceptionFormat = 'full'
}

Що добре бачити більше із стека


1
exceptionFormatУстановка працювала для мене, showStandardStreamsне було ніякого ефекту!
Shakeel

18

Як відповів @roby :

додавши наступний код до вашого build.gradle

apply plugin : 'java'

test {
    testLogging.showStandardStreams = true
}

Важливо!

Вам потрібно запустити тест gradle або побудувати з доданою cleanкомандою.

./gradlew clean test

or

./gradlew clean build

Сподіваюся, це працює.


3
Не могли б ви пояснити, для чого потрібен "чистий"?
Michael Kanis

2
@MichaelKanis, оскільки вас змінили конфігурацію gradle .. наскільки мені відомо, конфігурація gradle кешована.
nmfzone

1
@nmfzone, це означає, що вам потрібно один раз запустити чистий тест, щоб оновити кеш. Але в моєму сценарії мені потрібно кожного разу запускати команду clean, щоб лише показати результат тесту на консолі. Навіть незважаючи на те, що при наступних прогонах конфігурація gradle не змінюється.
Weishi Zeng

@WeishiZeng, ти впевнений, що тести просто не запущені, оскільки їх вхідні дані не змінились? Якщо у вас є якийсь тестовий вхід, відмінний від вихідних файлів Java, вам слід зареєструвати їх як Task.inputs, щоб gradle міг знати, коли вам потрібно повторно запускати тести чи ні.
Аякс

18

Для файлів Android Gradle

Якщо ви знаходитесь у файлі android gradle (якщо він apply plugin: 'com.android.application'знаходиться у верхній частині вашого файлу build.gradle)

Потім вставте це в build.gradle

// Test Logging
tasks.withType(Test) {
    testLogging {
        events "standardOut", "started", "passed", "skipped", "failed"
    }
}

Для звичайних файлів Gradle

Вставте це в build.gradle

// Test Logging
test {
    testLogging {
        showStandardStreams = true
    }
}

10
test {
    testLogging.showStandardStreams = true
}

і

test {
    testLogging {
        showStandardStreams = true
    }
}

також працює.


9

Просто додамо:

showStandardStreams = true

це скорочення для:

events = ["standard_out", "standard_error"]

Важливо пам’ятати про це, змішуючи обидва записи, як зазначено нижче:

test {
    testLogging {
        showStandardStreams = true
        events = ["passed", "failed", "skipped"]
    }
}

не призведе до видачі, тоді як зворотний порядок:

test {
    testLogging {
        events = ["passed", "failed", "skipped"]
        showStandardStreams = true
    }
}

додасть записи stdout до списку, тому stdout буде працювати .

Детальніше див. У джерелі .


Коли showStandardStreamsдруге місце впорядковується, просто для подвійної перевірки, чи додаються стандартні потоки до списку подій? Здається, це, але просто подвійна перевірка.
Джордж Пантазес

2

Якщо ви використовуєте Kotlin DSL, build.gradle.ktsсинтаксис дещо відрізняється.

Переконайтеся, що у вас є junit у залежностях:

dependencies {
    testImplementation("org.junit.jupiter:junit-jupiter:5.4.2")
    testImplementation("org.junit.jupiter:junit-jupiter-api")
    testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine")
}

Потім вам потрібно додати до тестового завдання:

import org.gradle.api.tasks.testing.logging.TestExceptionFormat

tasks.test {
    useJUnitPlatform()
    testLogging {
        showStandardStreams = true
        exceptionFormat = TestExceptionFormat.FULL
        events("skipped", "failed")
    }
}

Потім ви можете налаштувати параметри відповідно до своїх потреб.


1
./gradlew --info clean build test

Запустіть з --stacktraceопцією, щоб отримати трасування стека. Запустіть --infoабо, --debugщоб отримати більше вихідних даних журналу. Біжи з, --scanщоб отримати повну інформацію.


0

У моєму випадку я працював з Java та Spring-boot-starter-test.

У мене була та ж проблема, і проблема полягала в тому, що у мене не було жодного тестового двигуна.

Тому я додаю один до залежностей build.gradle, і він працює.

testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: dependencyVersion.junit5 testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: dependencyVersion .junit5

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