2017-09-06 1 views
1

Je souhaite injecter mes composants créés par poignard dans mes tests Espresso.Test expresso avec injection Dagger2

Les composants doivent être les mêmes, donc, ce ne sont pas une nécessité de passer outre rien de poignard.

J'ai la classe suivante:

@RunWith(AndroidJUnit4.class) 
public class AccountRepositoryTest { 
    @Inject 
    AccountRepository repository; 

    @Before 
    public void setUp() throws Exception { 
     new DaggerTestComponent().builder().build().inject(this); 
    } 
} 

Depuis que je ne peux pas ajouter AccountRepositoryTest à ma classe principale DaggerComponent, je créé une autre classe de composant dans mon dossier androidTests:

@Singleton 
@Component(modules = arrayOf(AppModule::class, DatabaseModule::class, RepositoryModule::class)) 
interface TestComponent: AppComponent { 
    fun inject(accountRepositoryTest: AccountRepositoryTest) 
} 

Mais poignard jamais génère l'interface ComponentClass à partir de TestComponent, lorsque je compile le code, je reçois toujours cette erreur:

Error:(26, 7) error: cannot find symbol class DaggerTestComponent 

Si je commente la ligne, mon code compile, donc je suis sûr que c'est juste ce qui empêche dagger de générer la classe. Donc, ma question est: comment faire make dagger générer une classe de composants à partir d'une interface définie dans le dossier androidTests?

Répondre

1

La solution consistait à ajouter dagger-compiler aux dépendances androidTest.

Si vous utilisez Kotlin:

kaptAndroidTest "com.google.dagger:dagger-compiler:$daggerVersion" 

Si vous utilisez java:

androidTestAnnotationProcessor "com.google.dagger:dagger-compiler:$daggerVersion"