2016-04-26 48 views
15

显然,当异常发生在桩的应用的仪器测试运行停止:如何在异常之后继续执行Android检测程序测试?

测试无法运行至完成。原因:'仪器由于'例外'运行失败。检查设备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

回答

2

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

+0

首先非常感谢您的回答。不幸的是,它不能解决我的问题。正如我所说的,测试下的应用程序会引发异常,从而停止整个仪器运行。在测试中添加try-catch并不适用。我正在寻找一个解决方案 - 如果可能的话,使用仪器 - 仪器运行将继续进行,而导致应用程序崩溃的测试将标记为“红色”。 – a11n

+0

我知道这不是解决这个问题的方法。正如我所说的,有一些Stoppig Dalvik虚拟机:在我看来,这可能与代码中的某个错误有关,所以我请你检查你的代码。 寻找一些崩溃,并确保不要在** onDestroy()**中调用** System.exit(0)**。 –

+0

System.exit()和onDestroy()都不会被调用。但Dalvik虚拟机停止,当然,由于仪表应用程序的例外。阅读http://developer.android.com/tools/testing/testing_android.html#Instrumentation后,我的印象是仪器启动了应用程序进程,并且在某种程度上独立于应用程序。但是你说过,如果仪表过程“死亡”,仪器会“死亡”?有没有机会去解耦? – a11n

0

你可以尝试把你的根build.gradle

tasks.withType(Test) { 
    ignoreFailures = true 
} 

根据文档:

如果测试发生故障,在任何设备上,构建就会失败。

入住这android testing

+1

我的问题不是失败的构建。因此,不幸的是你的提议无济于事。 (我的问题是,如果一个测试导致被测应用程序内的异常,测试套件不会运行到完成状态。) – a11n