Вызов конструктора Activity с помощью JUnit не выдал исключение времени выполнения? - PullRequest
0 голосов
/ 02 сентября 2018

Я проводил тест и пробовал кое-что, и заметил странное поведение.

@Test
public void setupActivity()
{
    Activity activity = new Activity();
}

Приведенный выше тест успешно выполнен и не выдает исключение времени выполнения.

@Test
public void setupActivity()
{
    Activity activity = new Activity();
    activity.isFinishing();
}

И это вызвало исключение времени выполнения для метода isFinishing ().

Почему не было вызвано исключение для вызова конструктора? Поскольку я взглянул на код для Activity.class в android.jar и все методы, включая конструктор, должны выдать исключение времени выполнения.

public Activity() {
    throw new RuntimeException("Stub!");
}

public boolean isFinishing() {
    throw new RuntimeException("Stub!");
}

Это какая-то проблема с бегуном JUnit? Я использовал JUnit4 для запуска своих тестов.

1 Ответ

0 голосов
/ 02 сентября 2018

Почему не было сгенерировано исключение для вызова конструктора?

Потому что создание экземпляра Activity разумно и необходимо. Фреймворк будет создавать экземпляры вашего Activity через конструктор по мере необходимости, основываясь на startActivity() запросах, изменениях конфигурации и т. Д.

Когда я взглянул на код для Activity.class в android.jar, и все методы, включая конструктор, должны вызвать исключение времени выполнения.

Вы просматриваете декомпилированную версию android.jar в своем Android SDK. Это не тот класс, который используется во время выполнения. Версия Activity, используемая во время выполнения, будет основана на версии Android на устройстве, плюс, возможно, настройки производителей. Например, - это источник Activity.

для Android версии 9.0.
...