提问者:小点点

用Dagger 2和自定义范围测试浓缩咖啡


在最近迁移到Dagger2之后,我正在开发的应用程序的每个功能都使用了@ActivityScope。每个应用程序特性都是使用MVP模式实现的,并且有自己的本地dagger组件设置,它依赖于应用程序组件,以获得整个应用程序生命周期(由应用程序提供)所需的依赖关系。每个特性的activity都将一个提供主要应用程序组件的基类扩展到一个由每个activity覆盖的方法,以便设置本地dagger组件(构建本地组件并实例化本地模块)。

我试图解决的问题是如何在测试中的activity中注入mocks。我遇到的主要问题是无法在运行时将原始的本地组件和相应的模块与模拟的组件进行交换。我读到很多关于用匕首2测试浓缩咖啡的文章,但它们并不是在推广清洁架构。在大多数情况下,它们依赖于AppComponent来注入所有活动,在我的例子中,每个特性的组件都负责注入它自己的activity。

到目前为止,我想出的最佳方法是引入一个组件构建器,该组件构建器仅作为测试设置的一部分进行初始化,并且在activity代码中使用该设置(如果初始化),否则将设置真正的组件。但是,我不愿意将生产和测试代码混合在一起。这里是一个示意图,它代表了匕首的设置:匕首2设置


共1个答案

匿名用户

我最后采用的方法是创建一个定制的AndroidJUnitRunner,如本文所述,并创建组件/模块,这些组件/模块为每个应用程序特性提供模拟,包括应用程序模块check Google doc for best Practices。此外,每个测试中的activity都必须被重写以注入模拟(仅仅是注入模拟依赖项的方法)。

为了保持主应用程序清单的清洁,在调试清单中声明被重写的测试活动。希望这种方法能帮助与我的Dagger2设置类似的人用Espresso和Dagger2进行测试。

祝你有个摇滚日!