2009/6/27 Karthik Krishnan <[email protected]> > > 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
presumably there's some place in your build or deployment where you make this swap? if so then you could swap the relevant Guice modules at the same point - either in the build, or at deployment time by indirectly looking up the modules at runtime or perhaps by simply replacing the class on the classpath (say by pre-pending the test version on the test classpath) afaik there's no reason why swapping classfiles should be harder than swapping XML 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. > > > -- Cheers, Stuart --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
