如何在异常后继续运行 Android 仪器测试?

问题描述 投票:0回答:4

显然,当检测应用程序发生异常时,检测测试运行停止:

测试未能完成。原因:“仪器运行因‘异常’而失败”。查看设备 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
android android-testing cucumber-jvm
4个回答
2
投票

仪器测试在出现问题时引发异常(例如,您要检查的某些条件)。您通常可以使用 try catch 语句(或更改这些检查)来避免某些测试失败。 在这种情况下,有一些东西使 Dalvik 虚拟机停止。这通常是由您的应用程序崩溃引起的。尝试仔细检查您的测试流程以分析是否存在崩溃。 另外,请确保不要在某些活动中的 onDestroy() 中使用 System.exit(0),因为这可能会导致您的问题。 我希望能帮到你。


0
投票

你可以试试把你的根放进去

build.gradle

tasks.withType(Test) {
  ignoreFailures = true
}

根据文档:

如果其中一个测试失败,在任何设备上,构建都会失败。

检查这个android测试


0
投票

我最近在寻找这个问题的解决方案,并发现了一些其他人可能会觉得有用的信息。

输入org.junit.rules.ErrorCollector。虽然如果您的仪器测试使用已弃用的ApplicationTestCase<Application>

,这将不起作用,但我能够切换到使用
androidx.test.platform.app.InstrumentationRegistry
来解决这个问题,因为我只需要应用程序上下文

这里是我发现帮助入门的gist的一些示例代码:

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));
    }
}

0
投票

你可以试试

Android Test Orchestrator
(我没试过)。

根据文档:

崩溃是孤立的:即使一个测试崩溃了,它也只会关闭它自己的 Instrumentation 实例。这意味着您套件中的其他测试仍在运行,提供完整的测试结果。

参见 Android 测试协调器

© www.soinside.com 2019 - 2024. All rights reserved.