Dagger2 + ActivityInjection + AndroidXTestEspressoRoboElectric在库项目中。

问题描述 投票:1回答:1

我正在开发android库模块,我想在我的模块中测试独立的活动。我是按照文章的内容 https:/medium.comandroiddevelopers write-once-run-everywher-tests-on-android-88adb2ba20c5。 要用roboelectric和androidx测试与espresso。我最近将匕首2引入到我的库项目中。

有了它,我的Activity看起来像这样。

class XYZLibBaseActivity : AppCompatActivity(){

    @Inject
    lateinit var resourceProvider: ResourceProvider

    override fun onCreate(savedInstanceState: Bundle?) {
        //creating the dagger component
        DaggerXYZLibComponent.factory().create(application).inject(this)

        super.onCreate(savedInstanceState)
    }
}

My component declaration is 

@Component(modules = [ResourceProviderModule::class])
interface XYZLibComponent{

    @Component.Factory
    interface Factory{
        fun create(@BindsInstance application: Application):XYZLibComponent
    }

    fun inject(xyzLibBaseActivity: XYZLibBaseActivity)
}

and dagger module is 

@Module
class ResourceProviderModule {

    @Provides
    fun provideResourceProvider(application: Application): ResourceProvider{
        return ResourceProviderImpl(application.applicationContext)
    }

}

这工作非常好,我不想让底层应用使用匕首2。

现在我想在不依赖底层应用程序或应用程序类的情况下测试我的Activity。我怎样才能在活动中注入模拟ResourceProvider?

android android-espresso dagger-2 robolectric androidx-test
1个回答
0
投票

许多选项中的一个是

  1. 在你的gradle配置中创建两个flavors:real和mock。
  2. 在这两个版本中,定义一个boolean buildConfigField标志。
  3. 在你的provideResourceProvider中,根据标志的值返回一个相应的实现
© www.soinside.com 2019 - 2024. All rights reserved.