@Rule
public ActivityTestRule<LoginTestActivity> mLoginActivityTestRule = new ActivityTestRule<>(LoginTestActivity.class);
@Test
public void loginWithTwitter() throws Exception
{
mLoginActivityTestRule.getActivity().performLogin();
}
La fonction performLogin
ci-dessus fonctionne bien quand je cours à travers l'application normalement, mais quand je le lance dans un test unitaire je reçois cette exception redoutée:Test unitaire comprenant un toast dans le code de production ne
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
la ligne d'erreur est l'endroit où je montre un Toast sur le fil principal à l'aide:
Toast.makeText(getApplicationContext(), "Login Success!", Toast.LENGTH_LONG).show();
Pourquoi est-ce défaut quand je le lance comme un test unitaire? Je suppose qu'une ActivityTestRule s'exécute sur son propre thread en quelque sorte, et il n'est pas considéré comme le fil principal par Android. Comment puis-je le résoudre?
J'ai essayé de passer en pour l'utiliser comme contexte pour le Toast mais la même erreur se produit. Dois-je emballer chaque affichage toast dans un appel pour s'exécuter sur le thread UI explicitement?