Android Instrumentation测试永远存在“运行测试”Android Studio

时间:2016-06-15 15:19:39

标签: android-gradle android-espresso android-studio-2.0 gradle-android-test-plugi

我使用Android Espresso Tests与最新的Android Studio 2.1.2并且测试运行正常但似乎独立测试应用程序似乎没有返回结果以反映回Android Studio并且它显示运行测试永远

4 个答案:

答案 0 :(得分:2)

我意识到这是一个老问题,但我刚碰到这个问题并且没有看到任何其他具有相同问题的搜索结果。

在我的情况下,这是由于测试中的代码有一个堆栈溢出异常,似乎测试运行器无法处理。我只能通过查看“Android监视器”并查看logcat来解决这个问题。

因此,如果你到达AS只是永远处于“运行测试”的位置,你可能希望在logcat中查找测试运行器无法处理的异常。

答案 1 :(得分:1)

如果存在,则必须尝试从build.gradle文件中删除testCoverageEnabled选项。 可能重复 Gradle build tool long for android Tests

答案 2 :(得分:0)

以防万一。 就我而言,我在执行后台任务后错误地设置了空闲状态(用false而不是true设置),因此espresso被认为是空闲状态。

答案 3 :(得分:0)

您可以添加这样的退出测试类,并将其包含在最后的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 {

}