Ich habe einen einfachen Test heute:Gibt es eine Möglichkeit, den Espresso-Test mit mehreren Testmethoden, aber nur einer Setup-Methode auszuführen?
@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 Testmethode der setActivity
ausgeführt wird, die, wenn Sie 10-15 Methoden haben, in der Endzeit sein wird raubend (wenn Sie haben eine Menge von Ansichten auch).
@BeforeClass
scheint nicht zu funktionieren, da es statisch sein muss und damit die ActivityTestRule
auch statisch sein muss.
Gibt es einen anderen Weg, dies zu tun? Anstatt mehrere Behauptungen in der gleichen Testmethode zu haben?
Sie verpassen meinen Punkt irgendwie ... Gibt es eine Möglichkeit, die Interaktion nicht für jede Testmethode definieren zu müssen? Ein guter Komponententest für mich ist, dass eine Testmethode nur eine Assert pro Test haben sollte und der Aufbau in einer anderen Methode erfolgen sollte. Stellen Sie sich vor, diese Ansicht würde voller Felder sein, die ich überprüfen möchte, wenn sie existieren. Es wäre sehr teuer, mit der Ansicht für jeden Test zu interagieren. Wenn ich diese Ansicht nur einmal "öffnen" und mehrere Tests durchführen möchte. – peuhse
Warum sollte ich keine Ansichtsinteraktion und andere Sachen in setActivity haben? Ein besserer Name wäre setupContext oder etwas und fügt dem Test dort alle Voraussetzungen hinzu. Das ist die Absicht des @Before-Schlüsselworts in Junit ... – peuhse