Если я откройте какой-нибудь класс Android в декомпиляторе, например Rect.java
Я вижу, что все его конструкторы и методы выбрасывают исключения Stub!, как описано в документации.
Код: Выделить всё
public final class Rect implements Parcelable {
@NonNull
public static final Parcelable.Creator CREATOR = null;
public int bottom;
public int left;
public int right;
public int top;
public Rect() {
throw new RuntimeException("Stub!");
}
public Rect(int left, int top, int right, int bottom) {
throw new RuntimeException("Stub!");
}
public Rect(@Nullable Rect r) {
throw new RuntimeException("Stub!");
}
public boolean equals(Object o) {
throw new RuntimeException("Stub!");
}
public int hashCode() {
throw new RuntimeException("Stub!");
}
public String toString() {
throw new RuntimeException("Stub!");
}
@NonNull
public String toShortString() {
throw new RuntimeException("Stub!");
}
@NonNull
public String flattenToString() {
throw new RuntimeException("Stub!");
}
//....
}
Вопрос в том, в чем причина такого поведения? Является ли вывод декомпилятора неправильным или почему конструктор не выдает ожидаемого результата?
Я предполагаю, что могут быть случаи, когда конструкторы должны работать (например, базовые классы или библиотеки типа Mockito, использующие наследование для насмешек) .
Но этот Rect является окончательным, и до сих пор не ясно, почему конструктор не выдает исключение.
Обновление: >
Я также заметил, что если я запускаю тест с конфигурацией Gradle Stub! Исключение не выдается из конструктора, но если я запускаю тест с конфигурацией Kotest, оно выдается, как и ожидалось.
Подробнее здесь: https://stackoverflow.com/questions/762 ... alled-from