Sorry if I did not understand your problem correctly, but here goes: in my integration test classes, in other words, the ones I really need a injector to play, I do exactly what you said you would do with Spring - I switch the modules while instantiating the injector.
Sometimes I don't want to rewire all of the bindings just because of the test. In fact, I usually only "mock" the ones that depend on external resources (like your datasource) or on not deterministic things (clock, random number generators, etc). In this case, I use Modules.override() to help me do that ( http://google-guice.googlecode.com/svn/trunk/javadoc/com/google/inject/util/Modules.html#override(com.google.inject.Module...) - sorry for the long link). Hope this helps, -- Rodrigo Couto On Jun 27, 4:45 am, Karthik Krishnan <[email protected]> wrote: > Adrian: Thanks for your reply: For unit tests, I am mocking behavior > for the dao class. Ideally I would like to use DM based datasources > for my integration tests and JNDI based data sources for my > application to unit test the entire work flow. > > In Spring it is so easy to do this. I just swap one xml with another > and let Spring framework handling the switch seamlessly. Idon't know > how to get Guice to do it for me without having to change the module > instance. > > On Jun 26, 11:51 pm, Adrian Cole <[email protected]> wrote: > > > Hi, Krishnan, > > > I'd extract MyDao's interface and move the other code to DataSourceMyDao. > > For unit tests, you can mock the behaviour in MyDao specific to that test. > > pita perhaps, but fairly normal. Creating a more versatile StubMyDao would > > involve some work. In jclouds, this proved useful, as it helps you load > > test your code, as opposed to your db. > > > All this said, you could always fire up an in-process db like derby or > > hsqldb. Less work, but it isn't really unit testing at that point ;) > > > my 2p. > > -Adrian > > jclouds <http://code.google.com/p/jclouds> > > > On Sat, Jun 27, 2009 at 7:57 AM, Karthik Krishnan > > <[email protected]>wrote: > > > > Hi Guice Gurus, > > > > I am just playing with Guice 2.x and I am stuck with an issue that I > > > can not resolve. Any help would be appreciated. > > > > I have a service class that takes DAO class as a constructor argument > > > that connects to the data base. The dao class accepts a data source as > > > a constructor argument. I have created two modules : the first one > > > injects a JNDI based data source, the other DriverManager based data > > > source. I would like > > > > public class MyService { > > > > private final MyDao myDao; > > > > public MyService(MyDao myDao) { > > > this.myDao = myDao; > > > } > > > > .... > > > > } > > > > public class MyDao { > > > private final DataSource dataSource; > > > > @Inject > > > public MyDao(DataSource dataSource) { > > > this.dataSource = dataSource; > > > } > > > > .... > > > } > > > > My modules: > > > > public class JndiDataSourceModule extends AbstractModule { > > > > public void configure() { > > > bind(DataSource.class).toProvider(JndiIntegration.fromJndi > > > (DataSource.class, "myDatasource")); > > > } > > > } > > > > public class DriverManagerDataSourceModule extends AbstractModule { > > > @Provides > > > DataSource getDataSource() { > > > return DriverManagerDataSource(driverClass, url, username, > > > password); > > > } > > > > .... > > > } > > > > I can not figure out how to inject DriverManager based DataSource for > > > unit tests and JNDI based datasource in my application. I was thinking > > > of passing modules in the constructor of my service class but I don't > > > think I would be able to mock my MyDao for exceptional conditions. > > > Any help would be appreciated. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "google-guice" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/google-guice?hl=en -~----------~----~----~----~------~----~------~--~---
