Как продолжить тестовый запуск инструментария Android после исключения?

По-видимому, запуск инструментального теста останавливается, когда в инструментированном приложении возникает исключение:

Не удалось выполнить тест до завершения. Причина: «Не удалось запустить прибор из-за исключения». Подробности см. В logcat устройства.

Это желаемое поведение или неправильная конфигурация в настраиваемом средстве выполнения инструментов?

Я использую пользовательский MonitorinInstrumentation [1] для автоматизации приемочных испытаний.

К сожалению, выполнение теста отменяется, когда в одном тесте возникает исключение. Я хочу, чтобы набор тестов был завершен и отмечал только неудавшиеся тесты, как в JUnit.

Существует ли общий подход к выполнению (связанных) тестов без выхода из всего инструментария в случае возникновения исключения в одном тесте?

  1. https://github.com/cucumber/cucumber-jvm/blob/master/examples/android/android-studio/Cukeulator/app/src/androidTest/java/cucumber/cukeulator/test/Instrumentation.java

person André Diermann    schedule 26.04.2016    source источник


Ответы (3)


Инструментальные тесты вызывают исключение, когда что-то идет не так (например, некоторые условия, которые вы хотите проверить). Обычно вы можете избежать неудачного выполнения какого-либо теста, используя оператор try catch (или изменив эти проверки). В этом случае что-то заставило виртуальную машину Dalvik остановиться. Обычно это вызвано сбоем в вашем приложении. Постарайтесь внимательно проверить поток ваших тестов, чтобы проанализировать, нет ли сбоев. Кроме того, не используйте System.exit (0) в onDestroy () в некоторых из ваших действий, потому что это может вызвать вашу проблему. Я надеюсь, что смогу вам помочь.

person Lorenzo Camaione    schedule 01.05.2016
comment
Прежде всего, большое спасибо за ваш ответ. К сожалению, это не решает мою проблему. Как я уже сказал, тестируемое приложение вызывает исключение, которое останавливает полную работу инструментария. Добавление try-catch в тест не применимо. Я ищу решение - если это вообще возможно с инструментарием - где инструментальный запуск продолжается, и только тест, который вызывает сбой приложения, помечен красным. - person André Diermann; 02.05.2016
comment
Я знаю, что это не решение этой проблемы. Как я уже сказал, есть что-то, что мешает виртуальной машине Dalvik: на мой взгляд, это может быть связано с какой-то ошибкой в ​​вашем коде, поэтому я приглашаю вас проверить свой код. Ищите сбои и не вызывайте System.exit (0) в onDestroy (). - person Lorenzo Camaione; 02.05.2016
comment
Ни System.exit (), ни onDestroy () не вызываются. Но Dalvik VM останавливается, конечно, из-за исключения в инструментированном приложении. Прочитав developer.android.com/tools/testing/, я был создается впечатление, что инструментарий запускает процесс подачи заявки и каким-то образом не зависит от приложения. Но вы говорите, что инструменты умирают, если умирает инструментальный процесс? Есть ли шанс развязать это? - person André Diermann; 02.05.2016
comment
Нет, нет. Если вы посмотрите на задачи Gradle, вы заметите, что те же задачи выполняются, когда вы обычно запускаете свое приложение или когда вы запускаете его в тестах инструментария. Разница в том, что при запуске тестируемого приложения запускаются другие задачи. Определенно, я должен взглянуть на ваш код, чтобы помочь вам больше. - person Lorenzo Camaione; 02.05.2016
comment
К сожалению, я не смог поделиться реальным кодом из-за NDA, однако этот пример имеет аналогичную настройку github.com/a11n/android-cucumber-espresso/tree/stackoverflow ... просто выполните ./gradlew connectedCheck - person André Diermann; 02.05.2016
comment
Я только что провел ваш инструментальный тест и не обнаружил никаких проблем. У меня зеленый тест ScenarioUserNotification. - person Lorenzo Camaione; 02.05.2016
comment
Я создал для этого stackoverflow ветки (см. Ссылку) ... может быть, вы случайно клонировали репозиторий и создали основную ветку? Пожалуйста, введите git branch в терминале Android Studio ... если вы используете основной тип ветки git checkout stackoverflow. Приносим извинения за неудобства. Вы видите сейчас исключение? - person André Diermann; 03.05.2016


Недавно я искал решение этой проблемы и нашел некоторую информацию, которая может оказаться полезной для других.

Введите org.junit.rules.ErrorCollector. Хотя этот не будет работать, если ваши инструментальные тесты используют устаревший класс ApplicationTestCase<Application>, я смог переключиться на использование androidx.test.platform.app.InstrumentationRegistry, чтобы обойти эту проблему, поскольку Мне нужен был только контекст приложения.

Вот пример кода из сути, которую я нашел, чтобы помочь начать работу:

package com.foo;

import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ErrorCollector;

import static org.hamcrest.Matchers.equalTo;

/**
 * Created: 12/04/19 17:12
 *
 * @author chris
 */
public class MyTest {
    @Rule
    public ErrorCollector collector = new ErrorCollector();

    @Test
    public void myTest() {
        collector.checkThat("a", equalTo("b"));
        collector.checkThat(1, equalTo(2));
    }
}
person whla    schedule 06.02.2020