Home » Android » Gradle Android: How to Display test results without using –info

Gradle Android: How to Display test results without using –info

Posted by: admin June 15, 2020 Leave a comment

Questions:

I am running android tests using the Gradle Android plugin and want to see individual test results.

From answers to this Question Gradle: How to Display Test Results in the Console in Real Time? it seems I can either use --info (which prints a LOT of other verbose junk I don’t care about) or use this closure which only works for the Java plugin (not the Android plugin)


test {
    afterTest { desc, result -> 
        println "Executing test ${desc.name} [${desc.className}] with result: ${result.resultType}"
    }
}

Is there some other option / closure I can use when I am running the connectedCheck task just to print the individual test results without all the other “verbosity”.

How to&Answers:

Use Gradle info

This will print all information from Gradle:

gradle --info

or Use Android Gradle plugin:

android.testOptions.unitTests.all {
    // Configure whether failing tests should fail the build
    ignoreFailures false

    testLogging {
        events "passed", "skipped", "failed", "standardOut", "standardError"
    }
}

or Use Gradle directly:

allprojects {
    tasks.withType(Test) {
        testLogging {
            exceptionFormat "full"
            showCauses true
            showExceptions true
            showStackTraces true
            showStandardStreams true
            events = ["passed", "skipped", "failed", "standardOut", "standardError"]
        }
    }
}

See: https://github.com/jaredsburrows/android-gradle-java-app-template/blob/master/gradle/compile.gradle#L20

Output:

io.github.hidroh.materialistic.data.SessionManagerTest > testView PASSED

io.github.hidroh.materialistic.data.SessionManagerTest > testIsViewFalse PASSED

io.github.hidroh.materialistic.data.SessionManagerTest > testIsViewNull PASSED

io.github.hidroh.materialistic.data.SessionManagerTest > testIsViewTrue PASSED

io.github.hidroh.materialistic.data.SessionManagerTest > testViewNoId PASSED

Source: https://github.com/hidroh/materialistic/blob/master/robolectric.gradle

Gradle Docs: https://docs.gradle.org/current/javadoc/org/gradle/api/tasks/testing/logging/TestLogEvent.html

Answer:

For Android Studio (tested on com.android.tools.build:gradle:2.1.0 and gradle version gradle-2.10) I added the following section to print exceptions in full format as well as logging every executed test:

apply plugin: 'com.android.application'

android { ... }

dependencies { ...}

tasks.withType(Test) {
    testLogging {
        exceptionFormat "full"
    }
    afterTest { desc, result ->
        println "Executing test ${desc.name} [${desc.className}] with result: ${result.resultType}"
    }
}

Answer:

For me all the options mentioned in the other answer still printed a lot of verbose information. So despite the requirement that info should not be used, I successfully use the following. For example, if your tests are in the package com.example.android, you can use:

gradle --info connectedDebugAndroidTest | grep "com\.example\.android\..* >"

Will print e. g.:

 com.example.android.login.LoginActivityTest > enterCredentialsTest[Testing_emulator(AVD) - 9] SUCCESS

And the word “SUCCESS” will be green, which is awesome.