2016-08-08 4 views
0

私は新しいAndroidJunit4とアクティビティルールを使ってonSavedInstanceをテストする方法を理解しようとしています。ユニットテストonSaveInstanceState with 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はまあまあです。

EDIT:

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

EDIT:

私は再びそれを実行し、あなたが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を追加しました。私は "Empty test suite"を取得しました。 UIThreadTestに必要な設定がありますか?上のコードを使用して私の例を表示できますか? – JPM

+0

'@ UIThreadTest'と' @ Test'の両方が必要です。彼らはどちらも方法の上にあることができます。 – DeeV

+0

まだ同じエラー...このコードを試したことがありますか、またはちょうど提案を投げていますか? – JPM

関連する問題