Currently no but should be pretty easy ;) Not sure i can go further today but the idea is: 1) create an fallback injector with a map string/object you can feed statically 2) implement getvalue method simply getting in the map the key i said before 3) return an instance in the test class with mockinjector annotation 4) when the mock is created put it in the map 5) clean the map (optional IMO)
You can test between 4 and 5 ;) Ps/note: if it was only resources creation the issue we could make them lazy Le 5 sept. 2012 09:22, "Jean-Louis MONTEIRO" <[email protected]> a écrit : > any basic sample to give it a try? > Very interesting BTW > > JLouis > > 2012/9/5 Romain Manni-Bucau <[email protected]> > > > added org.apache.openejb.injection.FallbackPropertyInjector which should > > manage failling injections (so you can inject a mock) and in application > > composer you can return your injector annotating @MockInjector a method. > > > > i didnt test too much, was just trying to find a way which doesn't impact > > the core in particular from a perf point of view. this one should be fine > > for @EJB injections. > > > > It will probably be reworked a bit but would like to discuss a bit > before. > > > > For mockito the impl could use a map (injection.getTarget().getName() + > "/" > > + injection.getName() as key, mock as value) > > > > wdyt? > > > > *Romain Manni-Bucau* > > *Twitter: @rmannibucau* > > *Blog: http://rmannibucau.wordpress.com* > > > > > > > > > > 2012/8/31 Romain Manni-Bucau <[email protected]> > > > > > Nothing against it but here is my opinion, > > > > > > JEE is designed to be testable so no need of any "complicated for > > nothing" > > > framework. > > > > > > For me mockito answer to a different need. > > > > > > For a cdi sample we have an example on trunk using alternatives ans > > > stereotypes. > > > > > > - Romain > > > Le 31 août 2012 12:45, "Yann Blazart" <[email protected]> a > écrit : > > > > > > I'm agree but tests with arquilian take more time than simple unit > tests. > > >> Le 31 août 2012 11:21, "Jean-Louis MONTEIRO" <[email protected]> a > > >> écrit : > > >> > > >> > Waiting for Romain's answer, but I guess it will be. Mocking is an > old > > >> > school solution ;-) > > >> > Indeed, nowadays, and mainly thanks to EJB 3 lite, Arquillian, and > so > > >> on, > > >> > it's far easier to get simple integration tests. So the need to > really > > >> > write unit tests is smaller. > > >> > > > >> > Just some thoughts. > > >> > Romain is currently on holidays, but quite sure he will find a hack > > for > > >> you > > >> > when he'll be back ;-) > > >> > > > >> > Jean-Louis > > >> > > > >> > > > >> > 2012/8/31 Yann Blazart <[email protected]> > > >> > > > >> > > Well, in fact I'm not sure to go in the right way. > > >> > > > > >> > > I wan't to make the demonstration that jee6 can now replace > spring. > > >> > > One thing very interesting in spring is about that faculty to make > > >> > > "unit-test" between real unit-test and integration tests with > > >> > > @Configuration. I wanted to make the same thing. > > >> > > > > >> > > I can reproduce it with cdi-unit for example, but I wan't to use > EJB > > >> > > 3.1 too (transaction, and security), my research show me the > OpenEjb > > >> > > stack with the ApplicationComposer runner, this is very cool ! > > >> > > > > >> > > Well to get back to my main subject. In fact that should be very > > nice > > >> > > to be able to use Mocks from Mockito instead of the instances > > produced > > >> > > by the container. > > >> > > > > >> > > Example : I have my business service a Stateless localbean, this > one > > >> > > use a DAO, same Stateless localbean with no interface. This DAO > use > > a > > >> > > persistence manager. As the DAO has no interface, I cannot replace > > his > > >> > > implementation in the @Module by writing a mock by hand, the > simple > > >> > > extended class do not work. The problem is that this dao > absolutely > > >> > > need the EntityManager in this case, so I need to provide it, I'm > > >> > > going to write an integration test, not a unit test. > > >> > > > > >> > > I'm currently studying the openjeb code to find a solution, made > > some > > >> > > things but no results for the moment. > > >> > > > > >> > > That would be nice to ben able to make someting like this : > > >> > > > > >> > > ejbJar.addEnterpriseBean(new > > >> > > MockStatelessBean(DAO.class,daoMockInstance)); > > >> > > > > >> > > If anybody have an idea or suggestion :) > > >> > > > > >> > > 2012/8/31, Romain Manni-Bucau <[email protected]>: > > >> > > > I dont think so (the proxy). The need is more than it: vetoing a > > >> bean > > >> > > > deployment (not managed today i think) + mocking (i would like > to > > >> avoid > > >> > > to > > >> > > > update core for this need) > > >> > > > > > >> > > > - Romain > > >> > > > Le 31 août 2012 09:15, "Jean-Louis MONTEIRO" < > [email protected]> > > a > > >> > > écrit : > > >> > > > > > >> > > >> Romain, > > >> > > >> > > >> > > >> maybe a proxy handler on top of the business interface can do > the > > >> > trick. > > >> > > >> Not sure it will work, but it should be able to provide any > > >> > > >> implementation > > >> > > >> even a mock to a business interface. > > >> > > >> > > >> > > >> The need is there, so that be great to have a look. > > >> > > >> Any other ideas? > > >> > > >> > > >> > > >> Jean-Louis > > >> > > >> > > >> > > >> > > >> > > >> 2012/8/30 Romain Manni-Bucau <[email protected]> > > >> > > >> > > >> > > >> > Hmm, not sure i get what is hard, never tried it but using > > >> > alternative > > >> > > >> > of > > >> > > >> > cdi or specialize should do the trick. > > >> > > >> > > > >> > > >> > To use mockito you need to change deep in the code the way > ejb > > >> are > > >> > > >> > instantiated+scanned (doable but i really think it is easier > to > > >> mock > > >> > > an > > >> > > >> ejb > > >> > > >> > than using mockito) > > >> > > >> > > > >> > > >> > Another lazy solution is to divide your module in submodule > to > > be > > >> > > >> > modular > > >> > > >> > even for testing > > >> > > >> > > > >> > > >> > - Romain > > >> > > >> > Le 29 août 2012 13:34, "Yann Blazart" < > [email protected]> > > a > > >> > > écrit > > >> > > >> > : > > >> > > >> > > > >> > > >> > > Wo I'm studying applicationComposer code. It's difficult. > > >> > > >> > > > > >> > > >> > > Why I want to use mockito ? Simply because I wan't to make > > some > > >> > unit > > >> > > >> > tests > > >> > > >> > > without have to get all. > > >> > > >> > > > > >> > > >> > > For example I wan't to test a business service, a stateless > > >> ejb. > > >> > > This > > >> > > >> one > > >> > > >> > > use another one that make some things with mms, databases > and > > >> > other > > >> > > >> > things. > > >> > > >> > > The only things I wan't to test are the calling sequences > to > > >> the > > >> > > >> > > second > > >> > > >> > ejb > > >> > > >> > > by the first one. That's why I wan't to use mockito as I > > don't > > >> > need > > >> > > >> > > to > > >> > > >> > > prepare the resources (jms db). if I use a class that > extends > > >> the > > >> > > >> second > > >> > > >> > > ejb, it will try to inject the resources I don't need.... > > >> > > >> > > > > >> > > >> > > 2012/8/28 Yann Blazart <[email protected]> > > >> > > >> > > > > >> > > >> > > > Mockito is more easy to use than extends the ejb class. > > >> > > >> > > > > > >> > > >> > > > I will search for a way to make that works. > > >> > > >> > > > > > >> > > >> > > > > > >> > > >> > > > 2012/8/28 Romain Manni-Bucau <[email protected]> > > >> > > >> > > > > > >> > > >> > > >> Hi, > > >> > > >> > > >> > > >> > > >> > > >> Generally we mock services replacing them by child or > > >> another > > >> > > >> > > >> implementation so no need of mockito and you keep > > injection > > >> > > >> > > >> consistent...but you can use mockito to implement this > > other > > >> > > class > > >> > > >> > with > > >> > > >> > > a > > >> > > >> > > >> kind of delegate pattern. > > >> > > >> > > >> > > >> > > >> > > >> - Romain > > >> > > >> > > >> Le 28 août 2012 16:19, "Yann Blazart" < > > >> [email protected]> > > >> > a > > >> > > >> > écrit > > >> > > >> > > : > > >> > > >> > > >> > > >> > > >> > > >> > Hi , is there a way to use Mockito instance with > > >> Application > > >> > > >> > composer > > >> > > >> > > >> for > > >> > > >> > > >> > unit tests ? > > >> > > >> > > >> > > > >> > > >> > > >> > For example here, is there a solution to use the > mockito > > >> > > >> > > >> > instance > > >> > > >> > for > > >> > > >> > > >> the > > >> > > >> > > >> > EjbJar ? : > > >> > > >> > > >> > > > >> > > >> > > >> > > > >> > > >> > > >> > > @RunWith(ApplicationComposer.class) > > >> > > >> > > >> > > public class EchoServiceTest { > > >> > > >> > > >> > > > > >> > > >> > > >> > > @Mock > > >> > > >> > > >> > > private DummyService dummyService; > > >> > > >> > > >> > > @EJB > > >> > > >> > > >> > > private EchoService echoService; > > >> > > >> > > >> > > @Before > > >> > > >> > > >> > > public void init() { > > >> > > >> > > >> > > MockitoAnnotations.initMocks(this); > > >> > > >> > > >> > > } > > >> > > >> > > >> > > > > >> > > >> > > >> > > @Module > > >> > > >> > > >> > > public EjbJar createEjbJar() { > > >> > > >> > > >> > > EjbJar ejbJar = new > > >> > > >> > EjbJar(this.getClass().getSimpleName()); > > >> > > >> > > >> > > ejbJar.addEnterpriseBean(new > > >> > > >> > > >> StatelessBean(EchoService.class)); > > >> > > >> > > >> > > // ejbJar.addEnterpriseBean(new > StatelessBean); > > >> > > >> > > >> > > return ejbJar; > > >> > > >> > > >> > > } > > >> > > >> > > >> > > > >> > > >> > > >> > > >> > > >> > > > > > >> > > >> > > > > > >> > > >> > > > > >> > > >> > > > >> > > >> > > >> > > > > > >> > > > > >> > > > >> > > > > > >
