使用Dagger 2和自定义示波器进行浓缩咖啡测试

问题描述:

在最近迁移到Dagger 2后,我正在使用的应用程序正在使用每个功能的@ActivityScope。每个应用程序功能都是使用MVP模式实现的,并具有自己的本地Dagger组件设置,它依赖于应用程序组件,以获取整个应用程序生命周期(由App提供)所需的依赖关系。每个功能部件的Activity扩展了一个基类,它将主应用程序组件提供给每个活动所覆盖的方法,以便设置本地Dagger组件(构建本地组件并实例化本地模块)。使用Dagger 2和自定义示波器进行浓缩咖啡测试

我想解决的问题是如何将mock注入到被测活动中。我遇到的主要问题是,我无法在运行时将原始本地组件和相应的模块与模拟的组件交换。我读过很多关于用Dagger 2测试咖啡的文章,但他们没有推广干净的建筑。在大多数情况下,他们依靠AppComponent来注入所有的活动,在我的情况下,每个功能的组件负责注入它自己的活动。

到目前为止,我提出的最好的方法是引入一个组件构建器,该组件构建器仅作为测试设置的一部分进行初始化,并在Activity代码中使用此设置进行初始化,否则设置实际组件。但是,我不愿意混用生产和测试代码。 这里是代表匕首设置的示意性: Dagger 2 Setup

我采取在最后的方法是创建一个定制AndroidJUnitRunner如上所述here以及创建元件/模块,其对于每一个应用程序的特征提供嘲笑,包括应用程序模块check Google doc for best practices。此外,每个被测试的活动都必须被覆盖以注入模拟(只是注入模拟依赖的方法)。

为了保持主应用程序清单干净,重写的测试活动在调试清单中声明。 希望这种方法可以帮助与my Dagger 2 setup类似的人用Espresso和Dagger 2做他们的测试。

有摇滚的日子!