2016-08-08 9 views
0

Ich versuche herauszufinden, wie onSavedInstance mit den neueren AndroidJunit4 und Activity Rules zu testen.Unit Test onSaveInstanceState mit 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(); 
      } 
     }); 
    } 

Ich bekomme einen Fehler nicht sicher, ob ich den richtigen Baum belle.

java.lang.IllegalStateException: Muss vom Hauptthread bei android.app.Activity.recreate (Activity.java:4620)

Antwort

1

Sie sollten den Test mit der Anmerkung @UiThreadTest laufen können aufgerufen werden. Es funktioniert für jede Testregel, die UiThreadTestRule erweitert. In diesem Fall passiert ActivityTestRule genau das.

EDIT:

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

EDIT:

Ich lief es einfach wieder und erinnerte sich, dass Sie nicht die Aktivität auf dem UI-Thread starten. Ich habe das gemacht und es ohne Komplikationen ausgeführt.

@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

Hinzugefügt UIThreadTest jetzt bekomme ich "Leere Testsuite.". Gibt es eine Art von Setup, das für UIThreadTest benötigt wird? Kannst du mir ein Beispiel mit meinem obigen Code zeigen? – JPM

+0

Sie benötigen sowohl '@ UIThreadTest' als auch' @Test'. Sie können nur beide über der Methode sein. – DeeV

+0

Immer noch der gleiche Fehler ... hast du diesen Code ausprobiert oder schmeißt du nur Vorschläge raus? – JPM