使用Dagger2注射液进行Espresso测试

时间:2017-09-06 01:32:00

标签: android android-espresso dagger-2

我想在我的Espresso测试中注入由dagger创建的组件。

组件应该是相同的,因此,没有必要覆盖任何匕首。

我有以下课程:

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

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

由于我无法将AccountRepositoryTest添加到我的主DaggerComponent类,因此我在androidTests文件夹中创建了另一个组件类:

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

但是dagger永远不会从TestComponent接口生成ComponentClass,当我编译代码时,我总是收到这个错误:

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

如果我对该行进行评论,我的代码会编译,所以我确信这就是阻止匕首生成该类的原因。

所以我的问题是:make dagger如何从androidTests文件夹中定义的接口生成一个组件类?

1 个答案:

答案 0 :(得分:2)

解决方案是将dagger-compiler添加到androidTest依赖项中。

如果您使用的是kotlin:

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

如果您使用的是java:

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