【发布时间】:2015-04-26 08:04:01
【问题描述】:
我在将我的 Android 应用从 Dagger 迁移到 Dagger2 时遇到问题。
我在测试期间使用 Dagger 在不同层(单元、功能设备以及介于两者之间的所有内容)注入模拟。
例如我有一个NetworkingModule,它提供了一个HttpTransport 和一个ServerConnector。对于某些测试,我只是模拟 http 层,对于其他测试,我模拟 ServerConnector,而其他测试使用发布类来测试与真实测试服务器的集成。
这些测试可以在所有构建风格(调试、发布等)上运行。
我只发现了 Dagger2 的描述,它为每个构建类型设置了一个静态注入配置 - 即一个用于绑定真实类的发布组件和一个用于绑定一组模拟的调试组件。
我需要找到一种方法让测试用例在应用程序启动阶段替换模块。
我怎样才能做到这一点?在我的想法中,当应用程序触发构建图时,我总是陷入困境,它必须使用一个组件,该组件是某个接口的实现,该接口具有其模块的静态注释???
换个说法:是否可以在同一个构建中编译多个提供相同注入的模块?然后我将如何在运行时注入正确的模块?
有人可以为我的NetworkingModule 示例起草一个解决方案吗?
顺便说一句:我大量使用Espresso、Robolectric 和Mockito。
谢谢。
【问题讨论】: