使用 ActivityRules 对 SaveInstanceState 进行单元测试
Unit Test onSaveInstanceState with ActivityRules
我正在尝试弄清楚如何使用较新的 AndroidJunit4 和 Activity 规则来测试 onSavedInstance。
@RunWith(AndroidJUnit4.class)
public class MyViewActivityTest{
@Rule
public UiThreadTestRule uiThreadTestRule = new UiThreadTestRule();
@Rule
public ActivityTestRule<MyViewActivity> mActivityRule = new ActivityTestRule<>(MyViewActivity.class);
@UiThreadTest
@Test
public void testOnSavedIntanceState() {
uiThreadTestRule.runOnUiThread(new Runnable() {
@Override
public void run() {
Intent in = new Intent();
MyViewActivity activity = mActivityRule.launchActivity(in);
activity.finish();
activity.recreate();
}
});
}
我收到一条错误消息,不确定我是否在正确的树上咆哮。
java.lang.IllegalStateException: 必须从主线程调用
在 android.app.Activity.recreate(Activity.java:4620)
您应该能够 运行 带有注释 @UiThreadTest 的测试。它适用于扩展 UiThreadTestRule
的每个测试规则。在这种情况下 ActivityTestRule
恰好就是这样做的。
编辑:
@UiThreadTest
@Test
public void testOnUIThread() {
// Test to run on UI thread
}
编辑:
我只是再次 运行 它并记得您不能在 UI 线程上启动 activity。我做了这个 运行 它没有并发症。
@RunWith(AndroidJUnit4.class)
public class TestActivity {
@Rule
public ActivityTestRule<MyViewActivity> activityRule = new ActivityTestRule<>(MyViewActivity.class, true, false);
@Test
public void testOnSavedInstanceState() throws Throwable {
activityRule.launchActivity(new Intent());
final Activity activity = activityRule.getActivity();
activityRule.runOnUiThread(new Runnable() {
@Override
public void run() {
activity.finish();
activity.recreate();
}
});
}
我正在尝试弄清楚如何使用较新的 AndroidJunit4 和 Activity 规则来测试 onSavedInstance。
@RunWith(AndroidJUnit4.class)
public class MyViewActivityTest{
@Rule
public UiThreadTestRule uiThreadTestRule = new UiThreadTestRule();
@Rule
public ActivityTestRule<MyViewActivity> mActivityRule = new ActivityTestRule<>(MyViewActivity.class);
@UiThreadTest
@Test
public void testOnSavedIntanceState() {
uiThreadTestRule.runOnUiThread(new Runnable() {
@Override
public void run() {
Intent in = new Intent();
MyViewActivity activity = mActivityRule.launchActivity(in);
activity.finish();
activity.recreate();
}
});
}
我收到一条错误消息,不确定我是否在正确的树上咆哮。
java.lang.IllegalStateException: 必须从主线程调用 在 android.app.Activity.recreate(Activity.java:4620)
您应该能够 运行 带有注释 @UiThreadTest 的测试。它适用于扩展 UiThreadTestRule
的每个测试规则。在这种情况下 ActivityTestRule
恰好就是这样做的。
编辑:
@UiThreadTest
@Test
public void testOnUIThread() {
// Test to run on UI thread
}
编辑:
我只是再次 运行 它并记得您不能在 UI 线程上启动 activity。我做了这个 运行 它没有并发症。
@RunWith(AndroidJUnit4.class)
public class TestActivity {
@Rule
public ActivityTestRule<MyViewActivity> activityRule = new ActivityTestRule<>(MyViewActivity.class, true, false);
@Test
public void testOnSavedInstanceState() throws Throwable {
activityRule.launchActivity(new Intent());
final Activity activity = activityRule.getActivity();
activityRule.runOnUiThread(new Runnable() {
@Override
public void run() {
activity.finish();
activity.recreate();
}
});
}