Я хочу установить флаг -XX:+ShowCodeDetailsInExceptionMessages
, чтобы включить полезные NPE (https://openjdk.java.net/jeps/358) в тестах
Я пробовал
tasks.withType<Test> {
jvmArgs("-XX:+ShowCodeDetailsInExceptionMessages")
testLogging {
setExceptionFormat("full") // Prints the message of the exception
}
}
Но NPE сообщений нет.
Вот моя java версия
java -version
openjdk version "14.0.1" 2020-04-14
OpenJDK Runtime Environment (build 14.0.1+7)
OpenJDK 64-Bit Server VM (build 14.0.1+7, mixed mode, sharing)
РЕДАКТИРОВАТЬ С ДОПОЛНИТЕЛЬНЫМ ИССЛЕДОВАНИЕМ
Чтобы более точно выяснить происхождение проблема, я еще немного поработал. Я пришел к выводу, что это не из моего java или тестовой среды, это может быть только неправильная конфигурация gradle или ошибка. Вот что я сделал:
Я установил пустой проект gradle с этим build.gradle.kts
plugins {
java
}
repositories {
mavenCentral()
}
dependencies {
testImplementation("junit:junit:4.13")
}
tasks.withType<Test> {
jvmArgs("-XX:+ShowCodeDetailsInExceptionMessages") // Helpful NPEs not working :(
testLogging {
setExceptionFormat("full") // Prints exception messages
}
}
И с тестовым классом (src / test / java / TestNPE . java)
import org.junit.*;
public class TestNPE {
@Test
public void true_npe() {
Object o = null;
o.toString();
}
@Test
public void throw_npe() {
throw new NullPointerException("My own message");
}
}
Итак, теперь
./gradlew test
> Task :test FAILED
TestNPE > throw_npe FAILED
java.lang.NullPointerException: My own message
at TestNPE.throw_npe(TestNPE.java:13)
TestNPE > true_npe FAILED
java.lang.NullPointerException
at TestNPE.true_npe(TestNPE.java:8)
2 tests completed, 2 failed
Это означает, что фреймворк не делает ничего особенного с NPE.
После этого я получил classpath Gradle использует, запустив тест с журналами отладки. Благодаря этому я мог запускать JUnit напрямую. С -XX: + ShowCodeDetailsInExceptionMessages появляется полезное сообщение NPE:
java -cp '/Users/apflieger/src/gradle-helpfull-npe/build/classes/java/test:/Users/apflieger/.gradle/caches/modules-2/files-2.1/junit/junit/4.13/e49ccba652b735c93bd6e6f59760d8254cf597dd/junit-4.13.jar:/Users/apflieger/.gradle/caches/modules-2/files-2.1/org.hamcrest/hamcrest-core/1.3/42a25dc3219429f0e5d060061f71acb49bf010a0/hamcrest-core-1.3.jar' -XX:+ShowCodeDetailsInExceptionMessages org.junit.runner.JUnitCore TestNPE
JUnit version 4.13
.E.E
Time: 0.006
There were 2 failures:
1) throw_npe(TestNPE)
java.lang.NullPointerException: My own message
at TestNPE.throw_npe(TestNPE.java:13)
2) true_npe(TestNPE)
java.lang.NullPointerException: Cannot invoke "Object.toString()" because "o" is null
at TestNPE.true_npe(TestNPE.java:8)
FAILURES!!!
Tests run: 2, Failures: 2