web-dev-qa-db-fra.com

Android Espresso: Comment puis-je tester un fragment spécifique lors du suivi d'une activité sur plusieurs architectures de fragments

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

19
Ersen Osman

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

2
Sean Blahovici