Тесты Android Инструментарий застрял "Запуск тестов" навсегда Android Studio

Я использую Android Espresso Tests с последней версией Android Studio 2.1.2, и тесты работают нормально, но не похоже, что отдельное тестовое приложение возвращает результаты, чтобы отразить их обратно в Android Studio, и показывает, что запуск тестов выполняется навсегда

3 ответа

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

В моем случае это было вызвано тем, что в тестируемом коде было исключение переполнения стека, которое, по-видимому, не удалось обработчику теста. Я смог понять это, только взглянув на "Монитор Android" и заглянув в журнал.

Поэтому, если вы дойдете до точки, когда AS всегда будет постоянно "запускать тест", вы можете захотеть найти в logcat исключение, которое не может обработать тестирующий.

Вы должны попытаться удалить параметр testCoverageEnabled из файла build.gradle, если он там есть. возможно дублирование инструмента сборки Gradle для тестов Android

На случай, если это кому-нибудь поможет. В моем случае после выполнения фоновой задачи я неправильно устанавливал состояние бездействия (false вместо true), поэтому эспрессо застрял, думая, что он бездействует.

Вы можете добавить такой тестовый класс выхода и включить его в свой Test Suite или Executor в последний

import android.os.Looper;

import androidx.test.rule.ActivityTestRule;
import androidx.test.runner.AndroidJUnit4;

import org.junit.FixMethodOrder;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.MethodSorters;

import java.io.IOException;

import static androidx.test.InstrumentationRegistry.getInstrumentation;

@RunWith(AndroidJUnit4.class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class ExitTests {

    @Rule
    public ActivityTestRule<MainActivity> myActivityTestRule =
            new ActivityTestRule<>(MainActivity.class, false, true);

    public void init(){
        getInstrumentation().waitForIdleSync();
        if(Looper.myLooper() == null)
            Looper.prepare();
    }


    @Test
    public void Exit() throws InterruptedException, IOException {
        Runtime.getRuntime().exec(new String[] {"am", "force-stop", "com.package.name"});
    }
}

Вот набор тестов

import org.junit.runner.RunWith;
import org.junit.runners.Suite;

@RunWith(Suite.class)
@Suite.SuiteClasses({ABC.class, ExitTests.class})
public class TestExecutionOrder {

}