vendredi 6 mars 2015

Dagger does not override module as expected

I'm using Square's Dagger v1.0.1 for dependency injection and I cannot make overrides = true to work as expected.


I have a provider class for test named MyGameTestModule.java :



@Module(
includes = { BaseModule.class, NetModule.class},
injects = { MyGame.class, MyManager.class },
overrides = true
)
public class MyGameTestModule {

// ...

@Provides
@Singleton
DummyInterface provideDummyInterface() {
return new DummyInterface() {
@Override
public Bar getBar() {
// return actual Bar
}
};
}
}


And I have a test like this named MyManagerTest.java :



public class MyManagerTest {
@Inject
public MyManager myManager;

// ...

@Before
public void setup() {
ObjectGraph objectGraph = ObjectGraph.create(new TestModule());
objectGraph.inject(this);
}

@Module(
includes = {MyGameTestModule.class},
injects = {MyManagerTest.class},
overrides = true
)
public static class TestModule {
@Provides
@Singleton
DummyInterface provideDummyInterface() {
return new DummyInterface() {
@Override
public Bar doSomething() {
// return mocked Bar
}
};
}
}
}


But when I run my tests, Dagger throws an exception like this:



java.lang.IllegalArgumentException: Duplicate: com.foo.DummyInterface com.foo.MyManagerTest$TestModule.provideDummyInterface() com.foo.DummyInterface com.foo.MyGameTestModule.provideDummyInterface() at dagger.internal.UniqueMap.put(UniqueMap.java:29) at dagger.internal.plugins.reflect.ReflectiveModuleAdapter.handleBindings(ReflectiveModuleAdapter.java:104) at dagger.internal.plugins.reflect.ReflectiveModuleAdapter.getBindings(ReflectiveModuleAdapter.java:89) at dagger.ObjectGraph$DaggerObjectGraph.makeGraph(ObjectGraph.java:174) at dagger.ObjectGraph$DaggerObjectGraph.access$000(ObjectGraph.java:132) at dagger.ObjectGraph.create(ObjectGraph.java:129) at com.foo.MyManagerTest.setup(MyManagerTest.java:38)



Am I missing something? Isn't it supposed to override DummyInterface in MyGameTestModule with "overrides = true" provided to Module?


Thanks in advance.


Aucun commentaire:

Enregistrer un commentaire