我写了一个用于测试Android应用程序的测试项目(Application Under Test是我自己的项目)。我在控制台以及Junit View中遇到以下故障。
测试无法运行完成。原因:'仪表运行因“进程崩溃”而失败。''。检查设备日志cat以获取详细信息
但是log-cat没有一个例外或任何东西。 Log似乎与成功的简单应用程序运行相同。 当我调试测试时,它在以下行的teardown()方法失败:
solo.finishOpenedActivities();
但是没有任何东西反映在log-cat上。此外,对于所有测试运行,此故障并不均匀。有时它在第一个测试用例之后和第一个测试用例之前的某个时间失败。
public class MainActivityTest extends
ActivityInstrumentationTestCase2<MainActivity> {
private Solo solo;
public MainActivityTest() throws ClassNotFoundException {
super(MainActivity.class);
}
@Override
protected void setUp() throws Exception {
super.setUp();
solo = new Solo(getInstrumentation(), getActivity());
}
public void testActivityProperlyDisplayed() throws Exception {
getInstrumentation().waitForIdleSync();
if (getActivity().getActionBar() != null) {
assertFalse("ActionBar is shown", getActivity().getActionBar()
.isShowing());
} else {
throw new AssertionFailedError("ActionBar not showing");
}
}
public void test2(){}
public void test3(){}
// and so on
@Override
protected void tearDown() throws Exception {
solo.finishOpenedActivities();
super.tearDown();
}
}
Robotium版本是5.2.1并在项目中正确导入。也成功运行其他应用程序。 这是在控制台中打印的行
[2014-07-29 14:19:38 - XMClientTest] Launching instrumentation android.test.InstrumentationTestRunner on UOQ1GYHIQ4
[2014-07-29 14:19:43 - XMClientTest] Sending test information to Eclipse
[2014-07-29 14:19:49 - XMClientTest] Test run failed: Instrumentation run failed due to 'Process crashed.'
[2014-07-29 14:19:49 - XMClientTest] Test run finished
答案 0 :(得分:2)
我遇到了问题。仪器测试不能测试具有 System.exit(0)语句的应用程序进行处理。
正如我们所知,在完成每个测试用例后,会调用tearDown()函数,并编写solo.finishOpenedActivities()来完成所有已打开的活动(推荐)。
当调用solo.finishOpenedActivities()时,它会调用已打开活动的 onDestroy()函数。 我在 onDestroy()方法中使用 System.exit(0),这导致停止无法由Instrumentation runner重新初始化的Dalvik虚拟机(因此完成所有对象)。
因此,尽量避免使用 System.exit(0); 来对您的应用进行单元测试。