2016-08-08 69 views
0

我想弄清楚如何使用较新的AndroidJunit4和活动规则测试onSavedInstance。单元测试onSaveInstanceState与ActivityRules

@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)

回答

1

叫你应该能够运行与注释@UiThreadTest测试。它适用于每个延伸UiThreadTestRule的测试规则。在这种情况下,ActivityTestRule恰好可以做到这一点。

编辑:

@UiThreadTest 
@Test 
public void testOnUIThread() { 
    // Test to run on UI thread 
} 

编辑:

我再跑了它,记住,你不能启动UI线程上的活动。我做到了这一点,并没有发生并发症。

@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(); 
      } 
     }); 
    } 
+0

现在增加了UIThreadTest,我得到了“空测试套件”。有没有需要UIThreadTest的某种设置,你能告诉我使用上面的代码的例子吗? – JPM

+0

你需要'@ UIThreadTest'和'@ Test'。他们都可以在方法之上。 – DeeV

+0

同样的错误...你有没有试过这段代码,或者你只是抛出建议? – JPM