hmm you can mock @Inject in EJB (that's what does the test). The opposite
can be done too. So not sure i got your point :s

dependending on the conf you need we can enhance tomee runner to support it
if it is not already the case.

*Romain Manni-Bucau*
*Twitter: @rmannibucau*
*Blog: http://rmannibucau.wordpress.com*




2012/9/11 Elton Kuzniewski <[email protected]>

> Great Romain! :)
>
> Some weeks ago I worked in that approach.
> Your first idea is great because in that way we can isolate the ejb's
> method
> to run a real UnitTest using Mockito API that is a knew and well documented
> project.
> The only issue that I still see here is about CDI inside the EJB, where we
> still without options to mock it directly.
> An way that I solved it is using ShrinkWrap to create, in runtime, a
> package
> where I have mocked EJBs that are dependencies (by CDI) from the real EJB
> that I'm interested to test.
> I need to do some tests here, but  your work is of great value.
>
> About your second news, I didn't use Arquillian Test Runner. Instead this I
> created a custom Runner because I had a lot of custom configurations that I
> should do before run container.
> I just have one thing against, where I'm not able to extends
> org.apache.openejb.config.ConfigurationFactory to inject, in run time, a
> new
> declaredApp created by ShrinkWrap.
> It would be great too if this class could have protected method where we
> can
> do this (example method List<String> getDeclaredApps()).
>
>
> Att,
>
> Elton Kuzniewski
> Analista de Sup. Desenvolvimento e Arquitetura
> CSM, SCJA, SCJP 5, SCWCD 5, SCBCD 5
> Pesquisa & Desenvolvimento
> Softplan/Poligraph
> + 55 48 3027-8000
> www.softplan.com.br
>
>
> -----Mensagem original-----
> De: Romain Manni-Bucau [mailto:[email protected]]
> Enviada em: terça-feira, 11 de setembro de 2012 10:09
> Para: [email protected]
> Assunto: Re: OpenEJB Mockito unit test
>
> some news:
>
> application composer + mockito:
>
> http://svn.apache.org/repos/asf/openejb/trunk/openejb/utils/openejb-mockito/
> src/test/java/org/apache/openejb/mockito/MockitoAndAppComposerTest.java
>
> the idea is to provide a custom injector (for @EJB) and an extension is
> automatically discovered for cdi
>
> *and the arquillian version: *
>
> http://svn.apache.org/repos/asf/openejb/trunk/openejb/arquillian/arquillian-
>
> openejb-embedded-4/src/test/java/org/apache/openejb/arquillian/openejb/Arqui
> llianAndMockitoTest.java
>
> here bean are produces (in static) and mock are automatically injected (but
> because of current arquillian lifecycle some werid cases can fail :(...for
> them manual mocking is the solution)
>
> it can pby be enhanced but we now have a base ;)
> *
> *
> *Romain Manni-Bucau*
> *Twitter: @rmannibucau*
> *Blog: http://rmannibucau.wordpress.com*
>
>
>
>
> 2012/9/5 Romain Manni-Bucau <[email protected]>
>
> > 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;
> >> > >> > > >> > > >> > >     }
> >> > >> > > >> > > >> >
> >> > >> > > >> > > >>
> >> > >> > > >> > > >
> >> > >> > > >> > > >
> >> > >> > > >> > >
> >> > >> > > >> >
> >> > >> > > >>
> >> > >> > > >
> >> > >> > >
> >> > >> >
> >> > >>
> >> > >
> >> >
> >>
> >
>
>

Reply via email to