Ho un semplice test di oggi:Esiste un modo per eseguire il test Espresso con più metodi di prova ma solo un metodo di installazione?
@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()));
}
}
Ma per ogni metodo di prova della setActivity
è gestito, che, se si dispone di 10-15 metodi, alla fine sarà in termini di tempo (se si dispone di un sacco di viste anche).
@BeforeClass
non sembra funzionare in quanto deve essere statico e quindi forzare lo ActivityTestRule
ad essere statico pure.
Quindi c'è un altro modo per farlo? Piuttosto che avere più affermazioni nello stesso metodo di prova?
Ti manca il mio punto ... C'è un modo per non dover definire l'interazione della vista per ogni metodo di prova? Un buon test unitario per me è che un metodo di test dovrebbe avere solo un assert per test e l'impostazione deve essere fatta in un altro metodo. Considerare che questa vista sarebbe piena di campi che voglio verificare se esistono, sarebbe molto costoso interagire con la vista per ogni test. Quando voglio solo "aprire" quella vista una volta ed eseguire più test. – peuhse
Perché non dovrei visualizzare l'interazione e altre cose in setActivity? Un nome migliore sarebbe setupContext o qualcosa del genere e aggiungere tutti i prerequisiti per il test lì. Questa è l'intenzione della parola chiave @Before in junit ... – peuhse