小编use*_*707的帖子

与 Dagger 一起使用时,Espresso 会生成 FileNotFoundException

我一直在努力处理一个遗留的 Android 应用程序,试图为它添加测试和适当的架构。该应用程序有一个主程序LaunchActivity,它在启动时运行一系列检查。最初,该活动使用 Dagger 来“注入依赖项”,活动将使用该依赖项来运行检查。

我将齿轮转向 MVVM,以便我可以单独测试视图模型,无需检测,并且只需要为 UI 测试注入模拟视图模型。我跟着这篇文章介绍了这些变化,包括切换到使用新的 Dagger Android 方法,如AndroidInjection.inject.

我希望测试能够尽可能多地指导任何更改,因此当我的基本架构正常工作时,我转而编写 UI 测试。现在,必须使用 Dagger 将模拟视图模型注入到活动中被证明是一项艰巨的任务,但我认为我已经找到了一个可行的解决方案。

我已经在使用TestApp带有自定义检测运行器的DexOpener,我将其更改为也实现HasActivityInjector,就像App我的应用程序的实际自定义(都扩展Application)。

对于 Dagger,我创建了单独的模块和一个用于测试的组件:

测试应用组件

@Component(
        modules = [
            TestDepsModule::class,
            TestViewModelModule::class,
            TestAndroidContributorModule::class,
            AndroidSupportInjectionModule::class
        ]
)
@Singleton
interface TestAppComponent {
    @Component.Builder
    interface Builder {
        @BindsInstance
        fun application(application: Application): Builder

        fun testViewModelModule(testViewModelModule: TestViewModelModule): Builder

        fun build(): TestAppComponent
    }

    fun inject(app: TestFieldIApp)
}
Run Code Online (Sandbox Code Playgroud)

测试视图模型模块

@Module
class TestViewModelModule {
    lateinit var mockLaunchViewModel: …
Run Code Online (Sandbox Code Playgroud)

android unit-testing kotlin android-espresso dagger-2

30
推荐指数
1
解决办法
939
查看次数