Mon application se compose d'un Activity
pour plusieurs Fragments
.
Je souhaite utiliser Espresso pour tester l'interface utilisateur du Fragments
. Cependant, j'ai rencontré un problème.
Comment puis-je tester un Fragment
qui n'est pas ajouté à un Activity
dans onCreate
. Tous les exemples que j'ai vus avec Fragments
impliquent l'ajout de Fragment
dans onCreate
. Alors, comment puis-je dire à Espresso d'aller à un Fragment
spécifique et de commencer à partir de là?
Merci
Si vous utilisez le composant Architecture de navigation, vous pouvez tester chaque fragment instantanément en effectuant un lien profond vers le fragment cible (avec les arguments appropriés) au début du test.
@Rule
@JvmField
var activityRule = ActivityTestRule(MainActivity::class.Java)
protected fun launchFragment(destinationId: Int,
argBundle: Bundle? = null) {
val launchFragmentIntent = buildLaunchFragmentIntent(destinationId, argBundle)
activityRule.launchActivity(launchFragmentIntent)
}
private fun buildLaunchFragmentIntent(destinationId: Int, argBundle: Bundle?): Intent =
NavDeepLinkBuilder(InstrumentationRegistry.getInstrumentation().targetContext)
.setGraph(R.navigation.navigation)
.setComponentName(MainActivity::class.Java)
.setDestination(destinationId)
.setArguments(argBundle)
.createTaskStackBuilder().intents[0]
destinationId étant l'ID de destination du fragment dans le graphique de navigation. Voici un exemple d'appel qui serait effectué une fois que vous êtes prêt à lancer le fragment:
launchFragment(R.id.target_fragment, targetBundle())
private fun targetBundle(): Bundle? {
val bundle = Bundle()
bundle.putString(ARGUMENT_ID, "Argument needed by fragment")
return bundle
}
A également répondu plus en détail ici: https://stackoverflow.com/a/55203154/2125351