我将Android应用从Dagger
迁移到Dagger2
时遇到问题。
我在测试期间使用Dagger在不同的层注入模拟(单元,功能设备及其间的所有内容)。
E.g。我有NetworkingModule
,其中提供了HttpTransport
和ServerConnector
。对于某些测试,我只是模拟http层,对于其他我模拟ServerConnector
,以及其他测试使用版本来测试与真实测试服务器的集成。
这些测试可以在所有构建版本上运行(调试,发布,...)。
我发现只有Dagger2
的描述为每个构建类型设置了一个静态注入配置 - 即用于绑定实际类的发布组件和用于绑定一组模拟的调试组件。
我需要找到一种方法让测试用例在应用程序启动阶段替换模块。
我怎样才能做到这一点?在我的想法中,当应用程序触发构建图形时,我总是卡住它必须使用一个Component,它是某个接口的实现,它具有模块的静态注释???
提出不同的问题:是否可以在同一构建中编译多个模块以提供相同的注入?我怎样才能在运行时注入正确的模块?
有人可以请我为NetworkingModule
。
顺便说一句:我大量使用Espresso
,Robolectric
和Mockito
。
THX。
答案 0 :(得分:0)
找到解决方案:
我不需要构建特定的组件或模块。
我的模块只处理我实现的代理,并设置为在测试时注入模拟。这对于发布版本来说非常便宜。为了测试,我甚至可以为方便功能进行一些反思。