PS: reviewing some personal projects I found another simpler way to handle
mocking of beans: scanningIncludes/excludes. Just excludes the bean to mock
and include (if not the case by default) the mock bean or its producer and
voilà :).

Romain Manni-Bucau
@rmannibucau <https://twitter.com/rmannibucau> |  Blog
<https://rmannibucau.metawerx.net/> | Old Blog
<http://rmannibucau.wordpress.com> | Github <https://github.com/rmannibucau> |
LinkedIn <https://www.linkedin.com/in/rmannibucau> | Book
<https://www.packtpub.com/application-development/java-ee-8-high-performance>


Le dim. 12 juil. 2020 à 13:42, Romain Manni-Bucau <rmannibu...@gmail.com> a
écrit :

>
>
> Le dim. 12 juil. 2020 à 12:42, Arne Limburg <arne.limb...@openknowledge.de>
> a écrit :
>
>> Hi Romain,
>>
>>
>> I don't understand your case 2.a. Even for mono flavor I would like to
>> define per test, which bean to mock and for which bean to take the real
>> instance. I have no idea how to do this with a simple extension.
>>
>
>
> Mono instance means a single container for all test methods and config is
> global so whatever you do beans are jvm bounds.
> Indeed you can use request scope to make it method scoped (thanks request
> scope controller) orthrough just a simple proxy and global static var but
> it is not the intent of the mono runner which really provides a context for
> all tests - does not prevent to have N executions though.
>
> Customization per test is the not the mono runner but the class one IMHO.
>
> I know with owb-se i tend to make none the scanning of test module and add
> to @Cdi(reusable=false, classes=MyMock.class) the overriden beans. Since mw
> supports cdise api it should work too and does not require any api buthave
> to admit i like the extension customization which enables more use cases
> and optimizations IMO.
>
> Hope it makes sense
>
>
>
>>
>> For 2.b. an extension that is registered per class sounds reasonable.
>> I'll give it a try.
>>
>>
>> Cheers,
>>
>> Arne
>>
>>
>> OPEN KNOWLEDGE GmbH
>> Poststraße 1, 26122 Oldenburg
>> Mobil: +49 151 - 108 22 942
>> Tel: +49 441 - 4082-154
>> Fax: +49 441 - 4082-111
>> arne.limb...@openknowledge.de
>> www.openknowledge.de <https://www.openknowledge.de/>
>>
>> Registergericht: Amtsgericht Oldenburg, HRB 4670
>> Geschäftsführer: Lars Röwekamp, Jens Schumann
>>
>> Treffen Sie uns auf kommenden Konferenzen und Workshops:
>>
>> Zu unseren Events<https://www.openknowledge.de/event/>
>>
>>
>>
>>
>>
>> ________________________________
>> Von: Romain Manni-Bucau <rmannibu...@gmail.com>
>> Gesendet: Sonntag, 12. Juli 2020 09:56
>> An: openwebbeans-dev
>> Betreff: Re: Mock bean feature for meecrowave
>>
>> Hi Arne,
>>
>> We integrate with junit in a "natural" way, ie we dont switch the way the
>> test class is intantiated which can break some other extensions if a
>> proxied instance is used (big drawback of using cdi beans for tests cause
>> you can scope them or worse, use interceptors) or not be as deterministic
>> as it must be if order of extensions has not cdi first.
>>
>> About the mocking here are some thoughts:
>>
>> 1. I wouldnt do a mockito extension, I still fail to see the value even
>> for
>> remote systems - we can discuss it in another thread if you think it is
>> not
>> just a habit
>> 2. Mocking a bean is mainly about vetoing one and adding another one, this
>> is mainly about adding an extension so:
>> 2.a. for mono flavor it is about writing an extension, that's it
>> 2.b. for per class flavor, it is about registering an extension just for
>> the class - or make it ignored/noop for others. It can be done with
>> overriding extension loader in owb properties but i guess a
>> @ClassCDIExtension on static fields can a good option too without having
>> to
>> play with container config
>>
>> Side note: mock alternative is an example of stereotype but im not sure it
>> is the best way to impl mocking (it was thought reversed IMHO)
>>
>> Once we have 2.b - only for per class flavor - we can have a new module
>> providing a built in extension without the spi registration to be per
>> class
>> friendly if still needed (think anonymous extension is a good enough
>> solution and avoids a new api layer).
>>
>> Wdyt?
>>
>>
>> Le dim. 12 juil. 2020 à 08:56, Arne Limburg <
>> arne.limb...@openknowledge.de>
>> a écrit :
>>
>> > Hi guys,
>> >
>> >
>> > I am prototyping a bean mocking feature for the test-module.
>> >
>> > The basic idea is to have an @MockBean annotation that is an
>> @Alternative
>> > @Stereotype and is enabled by the test module.
>> >
>> > The basic features works nearly out of the box (see
>> >
>> https://github.com/ArneLimburg/openwebbeans-meecrowave-examples/blob/mock/junit5-mock/src/test/java/com/superbiz/jaxrs/HelloEndpointTest.java
>> > ).
>> >
>> > The drawback of this small solution is, that the @MockBean has to be
>> > static and that we cannot have the same @MockBean definied in two tests
>> > (haven't tested that, but I guess we would have an
>> > AmbiguousResolutionException in that case).
>> >
>> >
>> > So here is what I would like to do:
>> >
>> > - Introduce a @TestClassScoped and @TestMethodScoped and make @MockBean
>> > @TestMethodScoped
>> >
>> > - Make every test class a CDI bean such that @Produces @MockBean fields
>> > are collected (Does anyone know why we don't did that in the first
>> place)?
>> >
>> > - Maybe (in a next step) directly add support for Mockito mocks or
>> > otherwise be sure, that our extension plays well together with the
>> > MockitoExtension
>> >
>> >
>> > Any objections to go ahead with that?
>> >
>> >
>> > I have no Idea how this could work with the @MonoMeecrowaveConfig.
>> >
>> >
>> > Any ideas on that?
>> >
>> >
>> > Cheers,
>> >
>> > Arne
>> >
>> > OPEN KNOWLEDGE GmbH
>> > Poststraße 1, 26122 Oldenburg
>> > Mobil: +49 151 - 108 22 942
>> > Tel: +49 441 - 4082-154
>> > Fax: +49 441 - 4082-111
>> > arne.limb...@openknowledge.de
>> > www.openknowledge.de<http://www.openknowledge.de> <
>> https://www.openknowledge.de/>
>> >
>> > Registergericht: Amtsgericht Oldenburg, HRB 4670
>> > Geschäftsführer: Lars Röwekamp, Jens Schumann
>> >
>> > Treffen Sie uns auf kommenden Konferenzen und Workshops:
>> >
>> > Zu unseren Events<https://www.openknowledge.de/event/>
>> >
>> >
>> >
>> >
>> >
>>
>

Reply via email to