2016-08-09 5 views
2

Ich habe eine Espresso-Testsuite für UI-Tests, die wie folgt aussieht:Aktivität Absturz von fehlendes Argument mit Junit ActivityTestRule

@RunWith(AndroidJUnit4.class) 
public class SpecialUiTests { 

    @Rule 
    public final ActivityTestRule<SpecialActivity> activity 
         = new ActivityTestRule<>(SpecialActivity.class); 

    @Test 
    public void specialTest() { 
     ... 
    } 

    ... 

} 

Das Problem ist, erwartet, dass Aktivität ein Bündel, und stürzt ab, wenn sie nicht finden können, der Wert, den es erwartet

Kann ich eine Testregel einrichten und trotzdem den Parameter (ein Bündel) übergeben, den die Aktivität erwartet?

Antwort

5
@Rule 
public ActivityTestRule activityRule = new ActivityTestRule<>(
SpecialActivity.class, 
true, // initialTouchMode 
false); //Lazy launching 

@Test 
public void specialTest() { 
    Intent intent = new Intent(); 
    Bundle bundle = new Bundle(); 
    bundle.putString(SpecialActivity.KEY_SPECIAL_VALUE, "789"); 
    intent.putExtra(SpecialActivity.ARG_SPECIAL_BUNDLE, bundle); 
    activityRule.launchActivity(intent); 

    onView(withId(R.id.special)) 
     .check(matches(withText("789"))); 
} 

Quelle: http://blog.sqisland.com/2015/04/espresso-21-activitytestrule.html

1

Sie auch getActivityIntent() Ihrer ActivityTestRule außer Kraft setzen kann, die Absicht zu erstellen. Auf diese Weise wird automatisch eine Aktivität mit der entsprechenden Absicht für alle Ihre Testmethoden gestartet. Probe:

@Rule 
public ActivityTestRule<SpecialActivity> mActivity = new ActivityTestRule<SpecialActivity>(SpecialActivity.class) { 
    @Override 
    protected Intent getActivityIntent() { 
     final Context targetContext = InstrumentationRegistry.getTargetContext(); 
     final Intent intent = new Intent(targetContext, SpecialActivity.class); 
     intent.putExtra("arg_one", 1); 
     return intent; 
    } 
}; 
Verwandte Themen