Запис під час тестування через 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.