By default, Gradle does not show you what happened when a unit test failed:
$ ./gradlew test
...
MyTest > Black_is_white FAILED
org.junit.ComparisonFailure at MyTest.java:6
^^^ WHAT ACTUALLY FAILED????
...
This is insane, and can be fixed (thanks to mrhaki) by editing build.gradle to add:
// NOTE: this is the non-Android solution - add to build.gradle
test {
testLogging {
exceptionFormat = 'full'
}
}
The above doesn’t work with Android, but something similar does:
// Android solution: add this to app/build.gradle
android.testOptions.unitTests.all {
testLogging {
exceptionFormat = "full"
}
}
And sanity prevails:
$ ./gradlew test
...
MyTest > Black_is_white FAILED
org.junit.ComparisonFailure:
expected:<[black]> but was:<[white]>
at org.junit.Assert.assertEquals(Assert.java:115)
at org.junit.Assert.assertEquals(Assert.java:144)
at MyTest.Black_is_white(MyTest.java:6)
...
Files for plain Gradle:
$ cat build.gradle
apply plugin: 'java'
repositories {
mavenCentral()
}
dependencies {
testCompile 'junit:junit:[4,)'
}
test {
testLogging {
exceptionFormat = 'full'
}
}
$ cat src/test/java/MyTest.java
public class MyTest
{
@org.junit.Test
public void Black_is_white()
{
org.junit.Assert.assertEquals("black", "white");
}
}
Files for Android+Gradle
$ cat build.gradle
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.1'
}
}
allprojects {
repositories {
jcenter()
}
}
$ cat app/src/main/AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="net.artificialworlds.testapp">
</manifest>
$ cat app/src/test/java/MyTest.java
public class MyTest
{
@org.junit.Test
public void Black_is_white()
{
org.junit.Assert.assertEquals("black", "white");
}
}
$ cat build.gradle
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.1'
}
}
allprojects {
repositories {
jcenter()
}
}
$ cat local.properties
sdk.dir=/home/andy/Android/Sdk
$ cat settings.gradle
include ':app'