How to test implementations of Guice AbstractModule in a big project without creating fake implementations? Is it possible to test bind() and inject() methods?
If your modules have logic you should definitely unit test them. If you just want to ensure the bindings are ok, write a small unit test that boots up the injector in Stage. TOOL.
install allows for composition: Within its configure method, FooModule may install FooServiceModule (for instance). This would mean that an Injector created based only on FooModule will include bindings and providers in both FooModule and FooServiceModule.
* AbstractModule is a helper class used to add bindings to the Guice injector. * * <p>Simply extend this class, then you can add bindings by either defining @Provides methods (see.
Overview of bindings in Guice. A binding is an object that corresponds to an entry in the Guice map. You add new entries into the Guice map by creating bindings.
Typically the best way to test Guice modules is to just create an injector in your test and ensure you can get instances of keys you care about out of it.
To do this without causing production stuff to happen you may need to replace some modules with other modules. You can use Modules.override
to selectively override individual bindings, but you're usually better off just not installing "production" type modules and using faked bindings instead.
Since Guice 4.0 there's a helper class BoundFieldModule
that can help with this. I often set up tests like:
public final class MyModuleTest {
@Bind @Mock DatabaseConnection dbConnection;
@Bind @Mock SomeOtherDependency someOtherDependency;
@Inject Provider<MyThing> myThingProvider;
@Before public void setUp() {
MockitoAnnotations.initMocks(this);
Guice.createInjector(new MyModule(), BoundFieldModule.of(this))
.injectMembers(this);
}
@Test public void testCanInjectMyThing() {
myThingProvider.get();
}
}
There's more documentation for BoundFieldModule
on the Guice wiki.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With