显然,当检测应用程序发生异常时,检测测试运行停止:
测试未能完成。原因:“仪器运行因‘异常’而失败”。查看设备 logcat 了解详情
这是自定义检测运行器中的预期行为还是错误配置?
我正在使用自定义
MonitorinInstrumentation
[1] 来自动化验收测试。
不幸的是,在一次测试中发生异常时,测试执行被取消。我希望测试套件完成并只标记失败的测试,就像在 JUnit 中一样。
是否有一种通用的方法来执行(连接的)测试,而无需退出整个仪器,以防在一个测试中发生异常?
仪器测试在出现问题时引发异常(例如,您要检查的某些条件)。您通常可以使用 try catch 语句(或更改这些检查)来避免某些测试失败。 在这种情况下,有一些东西使 Dalvik 虚拟机停止。这通常是由您的应用程序崩溃引起的。尝试仔细检查您的测试流程以分析是否存在崩溃。 另外,请确保不要在某些活动中的 onDestroy() 中使用 System.exit(0),因为这可能会导致您的问题。 我希望能帮到你。
你可以试试把你的根放进去
build.gradle
tasks.withType(Test) {
ignoreFailures = true
}
根据文档:
如果其中一个测试失败,在任何设备上,构建都会失败。
检查这个android测试
我最近在寻找这个问题的解决方案,并发现了一些其他人可能会觉得有用的信息。
输入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));
}
}
你可以试试
Android Test Orchestrator
(我没试过)。
根据文档:
崩溃是孤立的:即使一个测试崩溃了,它也只会关闭它自己的 Instrumentation 实例。这意味着您套件中的其他测试仍在运行,提供完整的测试结果。