Прочтите это, особенно если вы видите NoClassDefFoundErrors
в ЕДИНЫХ ИСПЫТАНИЯХ ...
Один интересный случай, когда вы можете увидеть много NoClassDefFoundErrors
, это когда вы:
throw
a RuntimeException
в блоке static
вашего класса Example
- Перехватить его (или, если оно просто не имеет значения, как если бы его бросили в тестовый пример )
- Попробуйте создать экземпляр этого класса
Example
static class Example {
static {
thisThrowsRuntimeException();
}
}
static class OuterClazz {
OuterClazz() {
try {
new Example();
} catch (Throwable ignored) { //simulating catching RuntimeException from static block
// DO NOT DO THIS IN PRODUCTION CODE, THIS IS JUST AN EXAMPLE in StackOverflow
}
new Example(); //this throws NoClassDefFoundError
}
}
NoClassDefError
будет брошено в сопровождении ExceptionInInitializerError
из статического блока RuntimeException
.
Это особенно важный случай, когда вы видите NoClassDefFoundErrors
в ваших ЕДИНЫХ ИСПЫТАНИЯХ .
В некотором смысле вы «разделяете» выполнение блока static
между тестами, но начальный ExceptionInInitializerError
будет только в одном тестовом примере. Первый, который использует проблемный класс Example
. Другие тестовые случаи, использующие класс Example
, просто выбросят NoClassDefFoundErrors
.