Comment puis-je tester les fragments de Robolectric?
Je sais qu'il est un Robolectric.shadowOf(Fragment)
méthode et un ShadowFragment
de la classe, de la pensée qu'ils ne sont pas répertoriés sur les docs, mais je ne peux pas le faire fonctionner.
myFragment = new MyFragment();
myFragment.onCreateView(LayoutInflater.from(activity), (ViewGroup) activity.findViewById(R.id.container), null);
myFragment.onAttach(activity);
myFragment.onActivityCreated(null);
Je suis en train de travailler avec l'API de niveau 13 (Nid d'abeille).
Grâce.
- Ok pal, merci!
Vous devez vous connecter pour publier un commentaire.
Edit #4 & #5: Dans Robolectric 3.*, ils ont divisé le fragment de départ fonctions.
Pour le soutien des fragments, vous aurez besoin d'ajouter un la dépendance à votre
build.gradle
:D'importation:
org.robolectric.les ombres.de soutien.v4.SupportFragmentTestUtil.startFragment;
Pour la plate-forme de fragments, vous n'avez pas besoin de cette dépendance. Importation:
import static org.robolectric.util.FragmentTestUtil.startFragment;
Ils utilisent tous les deux le même nom de
startFragment()
.Edit #3: Robolectric 2.4 a une API pour le soutien et régulière des fragments. Vous pouvez soit utiliser le
newInstance()
modèle ou utiliser le constructeur lors de la construction de votreFragment
's.Edit #2: Il y a une nouvelle aide si vous êtes à l'utilisation d'un support de fragments (celui qui prend en charge les activités régulières/fragments doivent être dans la prochaine version):
Modifier: Si vous avez mis à niveau à Robolectric 2.0:
Réponse originale à cette question
Que l'autre intervenant a suggéré, vous devez utiliser le fragment manager (au lieu d'appeler le cycle de vie des méthodes énumérées ci-dessus).
- Je créer un lanceur de test et d'avoir une fonction qui lance un fragment pour moi, donc je peux l'utiliser partout.
Vous êtes tous de faire cela à la dure. Utilisez simplement FragmentTestUtil.
Fragment
pour être visible, vous aurez besoin de demanderActivityController.of(yourFragment.getActivity()).visible()
. Cela m'a fait de la difficulté lorsque vous essayez de vérifier que mesFragment
'sonCreateOptionsMenu
a été appelé correctement. L'ajout de l'appel àvisible()
sur l'activité parent ai eu de travail.FragmentTestUtil.startVisibleFragment()
shadowOf(fragment.activity)
ne fonctionne pasSoutien des fragments ont été déplacés vers le module:
(à compter de juillet 2015,les Robolectric v3.0)
Ajouter un gradle dépendance app/build.gradle:
Ensuite importer dans votre Robolectric de test de la classe java:
Alors vous pouvez commencer & utiliser un soutien-v4 fragment pour le test:
Références:
Je suis sûr que vous devez créer un
FragmentTransaction
à l'aide de laFragmentManager
, alors cela fonctionnera.Je voulais juste ajouter que dans Robolectric 2.0, même après l'avoir fait:
Il encore retourné null pour moi. ce que j'ai fait a été d'ajouter
activity.getSupportFragmentManager().executePendingTransaction();
et cela a fonctionné.Il semble robolectric ne pas exécuter ce pour quelque raison. il semble que peut-être le Looper est en pause ou quelque chose. de toute façon, cela a fonctionné pour moi et il ressemble à ceci:
Si l'activité est l'extension de
AppCompatActivity
C'est à l'aide de Kotlin