2017-07-18 2 views
1

Après une migration récente vers Dagger 2, l'application sur laquelle je travaille utilise @ActivityScope pour chaque fonction. Chaque fonctionnalité d'application est implémentée à l'aide du modèle MVP et dispose de sa propre configuration Composant dague locale qui dépend du composant Application pour les dépendances requises pendant tout le cycle de vie de l'application (fourni par l'application). L'activité de chaque fonctionnalité étend une classe de base qui fournit le composant d'application principal à une méthode qui est surchargée par chaque activité afin de configurer le composant dagger local (construit le composant local et instancie le module local).Test expresso avec Dagger 2 et portées personnalisées

Le problème que j'essaie de résoudre est de savoir comment injecter des mocks dans l'activité testée. Le principal problème que je rencontre est que je ne peux pas permuter le composant local d'origine et le module correspondant avec des composants simulés lors de l'exécution. Il y a beaucoup d'articles sur les tests Espresso avec Dagger 2 que je lis, mais ils ne font pas la promotion d'une architecture propre. Pour la plupart, ils s'appuient sur l'AppComponent pour injecter toutes les activités, alors que dans mon cas, le composant de chaque fonctionnalité est responsable de l'injection de sa propre activité. Jusqu'à présent, la meilleure approche que j'ai trouvée a été d'introduire un générateur de composants qui n'est initialisé que dans le cadre de la configuration du test et dans le code d'activité pour l'initialiser, sinon configurer le composant réel. Cependant, je suis réticent à mélanger la production et le code de test. Voici un schéma qui représente la configuration Dagger: Dagger 2 Setup

Répondre

1

L'approche que j'ai pris à la fin était de créer une coutume AndroidJUnitRunner comme décrit here et de créer des composants/modules qui fournissent des simulacres pour chaque fonction de l'application, y compris la Module d'application check Google doc for best practices. De plus, chaque activité testée doit être surchargée pour injecter les mocks (juste la méthode qui injecte les dépendances mockées). Pour que le manifeste de l'application principale reste propre, les activités de test substituées sont déclarées dans un manifeste de débogage. Espérons que cette approche aidera les personnes ayant un comportement similaire à my Dagger 2 setup à faire leurs tests avec Espresso et Dagger 2.

Passez une journée rock 'n' roll!