2015-04-23 22 views
0

我在将我的Android应用从Dagger迁移到Dagger2时遇到问题。与匕首动态绑定2

我在测试过程中使用Dagger在不同的层注入模拟(单元,功能设备和其间的一切)。

E.g.我有一个NetworkingModule,它提供了HttpTransportServerConnector。对于某些测试,我只是嘲笑http层,对于其他人我嘲笑ServerConnector和其他测试用途发布类来测试与真实测试服务器的集成。

这些测试可以在所有构建版本上运行(调试,发布,...)。

我只发现了Dagger2的描述,它为每个构建类型设置了一个静态注入配置 - 即绑定实际类的释放组件和绑定一组模拟的调试组件。

我需要找到一种方法让测试用例在应用程序启动阶段替换模块。

我该如何做到这一点?在我的想法中,当应用程序触发构建其必须使用组件的图时,我总是陷入停滞状态,这是一个组件的实现,它具有静态注释其模块的特定接口。

问一个问题:是否可以在提供相同注射的相同构建中编译多个模块?我将如何在运行时注入正确的模块?

有人可以请我为我的例子NetworkingModule的解决方案。

BTW:我大量使用Espresso,RobolectricMockito

Thx。

回答

0

找到了解决方案:

我不需要构建特定的组件或模块。

我的模块只是处理我实现的代理,并在测试时设置注入模拟。这对发布版本非常便宜。而为了测试,我甚至可以为了方便功能而做一些反思。

+2

您能否提供一个代码示例,您是如何做到的? – confile