Gibt es eine Möglichkeit zu laufen, Espresso-test mit mehreren test-Methoden, aber nur eine setup-Methode?
Habe ich einen einfachen test heute:
@RunWith(AndroidJUnit4.class)
@LargeTest
public class WhenNavigatingToUsersView {
@Rule
public ActivityTestRule<MainActivity> mActivityRule =
new ActivityTestRule(MainActivity.class);
private MainActivity mainActivity;
@Before
public void setActivity() {
mainActivity = mActivityRule.getActivity();
onView(allOf(withId(R.id.icon), hasSibling(withText(R.string.users)))).perform(click());
}
@Test
public void thenCorrectViewTitleShouldBeShown() {
onView(withText("This is the Users Activity.")).check(matches(isDisplayed()));
}
@Test
public void thenCorrectUserShouldBeShown() {
onView(withText("Donald Duck (1331)")).check(matches(isDisplayed()));
}
}
Aber für jede test-Methode die setActivity
ausgeführt, die, wenn Sie 10-15 Methoden, am Ende wird sehr zeitaufwändig sein, (wenn Sie haben eine Menge von Ansichten zu).
@BeforeClass
scheint nicht zu funktionieren, da es zu statisch und so zwingt die ActivityTestRule
werden sowohl statische als auch.
Also gibt es irgendeine andere Möglichkeit, dies zu tun? Anstatt mehrere asserts in die gleiche test Methode?
Du musst angemeldet sein, um einen Kommentar abzugeben.
@Before
annotation soll nur vorangehen Methoden mit vorläufigen setup. Initialisierung der benötigten Objekte, immer in der aktuellen Sitzung oder der aktuellen Aktivität, Sie bekommen die Idee.Ablösung der alten
setUp()
Methode aus der ActivityInstrumentationTestCase2, nur als@After
ersetzt dietearDown()
.Das bedeutet, dass es ausgeführt werden soll, vor jedem test in der Klasse und es sollte so bleiben.
Sollten Sie keine
ViewInteraction
keineDataInteraction
keineAssertions
nochView
Aktionen, die in dieser Methode, denn das ist nicht sein Zweck.In Ihrem Fall, entfernen Sie einfach die
onView()
Anruf vonsetActivity()
und legte es in die eigentlichen test-Methoden, in jeder test-Methode, wenn es notwendig ist, etwa so:Eine weitere option für Sie wäre die Trennung dieser tests.
Klick auf das Benutzer-Symbol in der HomeActivity test-Klasse, während der rest des tests werden in den UserActivity test-Klasse.
UserActivity test-Klasse starten UserActivity mit der richtigen Absicht ( Sie können dies tun, indem die false-Boolean-in der Regel-Konstruktor, und ruft
launchActivity(intent)
manuell).Dadurch wird verhindert, dass die Notwendigkeit der Einstellung der Tätigkeit jede einzelne Zeit. Es wird auch loswerden ständige Abhängigkeit von der Haupttätigkeit. Wenn etwas schief geht, Ihre UserActivity tests sind intakt und produzieren die Ergebnisse, während das Problem gefangen werden, durch den test in der MainActivity.
Eigentlich damit, dass Ihre tests werden könnten MediumSize, da die Laufzeit drastisch verringern.
Können Sie versuchen, diese :
Versuchen, führen Sie Ihren test, indem Sie diesen Befehl:
Haben Sie versucht, es zu tun, wie folgt, oder eine kleine Variante davon, um Ihre Bedürfnisse anzupassen:
Diese Weise, Sie 'mainActivity' müssen nicht statisch sein. Auch die
setActivity()
Methode wird aufgerufen, nur einmal.