如何使用RoboGuice覆盖@ContextSingletons进行测试?

时间:2013-04-17 10:44:46

标签: android testing dependency-injection roboguice

我正在尝试使用特定测试模块覆盖几次进样测试。对于像这样的真实单身人士来说,这样做很好:

...custom module...
bind(SomeClass.class).toInstance(instanceOfMockedClass);
...

现在,当ContextSingletons需要被覆盖时,这会带来问题。像上面这样做显然会为所有上下文(服务,活动)注入相同的实例,其中单独的实例是正确的。我试图绕着ContextScopedProvider包围但是找不到在bind(...).toProvider(...)构造中实际使用它的方法,因为这个类本身没有实现Guice的Provider<T>接口。

如何实现这一目标?

(也在https://groups.google.com/forum/?fromgroups=#!topic/roboguice/MnWGrHFDOsQ上询问)

1 个答案:

答案 0 :(得分:1)

另一种为常规单身人士写这个的方法就是这样

bind(SomeClass.class).toProvider(SomeClassProvider.class).in(Singleton.class);

如果你这样做,你不需要在绑定时提供实例,虽然对Singleton来说很好,但显然不适用于ContextSingleton,因为还没有上下文。

您可以对ContextSingleton使用相同类型的绑定:

bind(SomeClass.class).toProvider(SomeClassProvider.class).in(ContextSingleton.class);

现在,RoboGuice为您注入的SomeClass的所有实例都将适当确定范围,无论是Singleton还是ContextSingleton。