异常发生后如何继续Android instrumentation测试运行?

异常发生后如何继续Android instrumentation测试运行?,android,android-testing,cucumber-jvm,Android,Android Testing,Cucumber Jvm,显然,当插入指令的应用程序中发生on异常时,插入指令的测试运行将停止: 测试未能运行到完成。原因:“由于“异常”,检测运行失败。”。查看设备日志以了解详细信息 这是自定义检测运行程序中的期望行为还是错误配置 我正在使用一个自定义的监视实施[1]来自动化验收测试 不幸的是,当一个测试中发生on异常时,测试执行被取消。我希望测试套件能够完成,并且只标记失败的测试,就像在JUnit中一样 如果一个测试中出现异常,是否有一种在不退出整个检测的情况下执行(连接)测试的通用方法? 当出现错误时(例如,要检

显然,当插入指令的应用程序中发生on异常时,插入指令的测试运行将停止:

测试未能运行到完成。原因:“由于“异常”,检测运行失败。”。查看设备日志以了解详细信息

这是自定义检测运行程序中的期望行为还是错误配置

我正在使用一个自定义的
监视实施
[1]来自动化验收测试

不幸的是,当一个测试中发生on异常时,测试执行被取消。我希望测试套件能够完成,并且只标记失败的测试,就像在JUnit中一样

如果一个测试中出现异常,是否有一种在不退出整个检测的情况下执行(连接)测试的通用方法?


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

    您可以尝试将根目录放入build.gradle

    tasks.withType(Test) {
      ignoreFailures = true
    }
    
    根据文件:

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


    检查此项

    我最近正在寻找此问题的解决方案,并找到一些其他人可能会觉得有用的信息

    进入。尽管如此,我还是能够切换到使用
    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));
        }
    }
    

    首先非常感谢你的回答。不幸的是,它不能解决我的问题。正如我所说的,被测试的应用程序会引发异常,从而停止整个检测运行。在测试中添加try-catch不适用。我正在寻找一个解决方案——如果有可能的话——在这个解决方案中,检测将继续运行,只是导致应用程序崩溃的测试被标记为“红色”。我知道这不是这个问题的解决方案。正如我所说,有一件事阻止了Dalvik虚拟机:在我看来,这可能与代码中的某些错误有关,因此我邀请您检查代码。查找一些崩溃,确保不在onDestroy()中调用System.exit(0)。既不调用System.exit()也不调用onDestroy()。但是Dalvik VM当然会停止,因为插入指令的应用程序中存在异常。在阅读之后,我的印象是仪器开始应用程序过程,并且在某种程度上独立于应用程序。但您是说,如果插入指令的过程“死了”,则插入指令的过程“死了”?有没有机会把它解耦?没有。如果您查看Gradle任务,您会注意到,当您正常运行应用程序或在检测测试下运行应用程序时,会运行相同的任务。不同之处在于,当您在测试下运行应用程序时,会运行一些其他任务。当然,我应该看看你的代码,以帮助你更多。不幸的是,我不能分享由于保密协议的实际代码,但这个例子有一个类似的设置。。。只需执行即可。/gradlew connectedcheck我的问题不是生成失败。因此,不幸的是,你的建议没有帮助。(我的问题是,如果一个测试导致被测应用程序中出现异常,那么测试套件不会运行到完成。)