我写了一个用于测试
android应用程序的测试项目(Application Under Test是我自己的项目).我在控制台和Junit View中遇到以下故障.
测试未能完成.原因:’由于’流程崩溃’导致仪表运行失败.检查设备log-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
最佳答案 我遇到了问题.检测测试无法测试具有System.exit(0)语句的应用程序进行处置.
正如我们所知,在完成每个测试用例后,会调用tearDown()函数,并编写solo.finishOpenedActivities()来完成所有已打开的活动(推荐).
当solo.finishOpenedActivities()被调用时,它调用已打开活动的onDestroy()函数.
我在onDestroy()方法中使用System.exit(0),这导致停止Dalvik虚拟机(因此完成所有对象),无法通过Instrumentation runner重新初始化.
因此尽量避免使用System.exit(0);为了对您的应用程序进行单元测试