如果你的 Android Junit 4 测试在运行时崩溃,可以尝试采用以下方法来解决:
确认测试代码中没有空指针异常,除此之外可能还有其他的异常,需要一一检查。
确认测试用例的线程和被测代码的线程是一致的,如果线程不一致可能会导致测试崩溃。
下面给出一个代码示例,演示了可能导致 Android Junit 4 测试崩溃的情形:
public class MainActivityTest extends ActivityInstrumentationTestCase2 {
private MainActivity mActivity;
public MainActivityTest() {
super(MainActivity.class);
}
@Override
protected void setUp() throws Exception {
super.setUp();
mActivity = getActivity();
}
@Test
public void testUI() {
TextView textView = mActivity.findViewById(R.id.text_view);
assertNotNull(textView);
assertEquals("Hello", textView.getText().toString());
}
@Test
public void testBackground() {
new Thread(new Runnable() {
@Override
public void run() {
mActivity.doSomethingInBackground();
}
}).start();
}
}
在上面的代码示例中,testUI
方法是在主线程中运行的,而 testBackground
方法是在另一个线程中运行的。如果 doSomethingInBackground
方法中有 UI 操作(如更新 UI),那么这个测试用例就有可能失败。
要解决这个问题,可以采取以下策略之一:
在 testBackground
方法中使用 UI 线程执行 doSomethingInBackground
方法,并监控 UI 线程的运行结果。
在 doSomethingInBackground
方法中不要处理 UI 相关的操作。
在 doSomethingInBackground
方法中使用 Activity.runOnUiThread
方法执行 UI 相关的操作。