Nice one Gerhard,

I think this should be added to deltaspike Test-Control.

cheers


On 5 May 2014 19:36, Michael Li <[email protected]> wrote:

> Looks like a viable alternative. I will try it later. Thanks Gerhard!
>
>
> On Mon, May 5, 2014 at 10:10 AM, Gerhard Petracek <
> [email protected]> wrote:
>
> > hi michael,
> >
> > i haven't tested your use-case, however, you can have a look at [1].
> >
> > regards,
> > gerhard
> >
> > [1]
> >
> http://os890.blogspot.com/2014/05/add-on-mock-cdi-beans-with-deltaspike.html
> >
> >
> >
> > 2014-05-03 1:02 GMT+02:00 Michael Li <[email protected]>:
> >
> > I solved the problem by separating the repositories into another
> >> sub-project, where I run JUnit with "Test-Control", and the project with
> >> CDI beans is still tested using CDI-Unit. It's not perfect, but at least
> >> working now.
> >>
> >>
> >> On Thu, May 1, 2014 at 1:10 AM, Karl Kildén <[email protected]>
> >> wrote:
> >>
> >> > I keep forgetting you can't disable the repositories like this :-) (at
> >> > least I don't know how) Not sure if there's some trick or you need a
> >> > separate module with only a dependency to data-api for mocked tests.
> >> Could
> >> > ofc require some maven trickery to get working.
> >> >
> >> > Otherwise the tests with mocks can always be plain Mockito I guess.
> >> >
> >> >
> >> > On 1 May 2014 10:05, Karl Kildén <[email protected]> wrote:
> >> >
> >> > > OK,
> >> > >
> >> > > But per test case / suit with Test-Control it is possible to set
> >> > > ProjectStage [1]. You can create a custom project stage and use it.
> >> Then
> >> > > your mock can be project stage activated with @Exclude [2]. See [3]
> >> for
> >> > > code example
> >> > >
> >> > > http://deltaspike.apache.org/projectstage.html [1]
> >> > > http://deltaspike.apache.org/core.html#exclude [2]
> >> > >
> >> > > [3]
> >> > >
> >> > > @TestControl(projectStage = MockTest.class)
> >> > >
> >> > >
> >> > > @Exclude(exceptIfProjectStage = MockTest.class)
> >> > > public class MyMock implements DeltaspikeRepository{}
> >> > >
> >> > >
> >> > >
> >> > > On 1 May 2014 00:03, Michael Li <[email protected]> wrote:
> >> > >
> >> > >> Hi Karl,
> >> > >>
> >> > >> Thanks for your reply. I guess you misunderstood my testing
> scenario.
> >> > Let
> >> > >> me make it more clear.
> >> > >>
> >> > >> * Main source:
> >> > >>
> >> > >> class A {
> >> > >>   @Inject B b;
> >> > >> }
> >> > >>
> >> > >> class B {}
> >> > >>
> >> > >>
> >> > >> * Test source:
> >> > >>
> >> > >> class ATest {
> >> > >>   @Inject A a;
> >> > >>
> >> > >>   // I want inject this B mock into A
> >> > >>   @Produces @Mock  // @Mock is Mockito annotation
> >> > >>    B b;
> >> > >> }
> >> > >>
> >> > >> class BTest {
> >> > >>    @Inject B b; // my real B impl
> >> > >> }
> >> > >>
> >> > >> The problem is that the container see two B instances: one from
> main
> >> > >> source
> >> > >> and another from the mock from testA.
> >> > >> I know it shall work with some configuration as CDI-Unit does.
> >> However,
> >> > >> CDI-Unit can not inject data repositories.
> >> > >>
> >> > >>
> >> > >>
> >> > >> On Wed, Apr 30, 2014 at 2:20 PM, Karl Kildén <
> [email protected]>
> >> > >> wrote:
> >> > >>
> >> > >> > @MyQualifier
> >> > >> > @Inject
> >> > >> > MyMock myMock
> >> > >> >
> >> > >> > Why make it hard for yourself?
> >> > >> >
> >> > >> > TestControl, @Exclude and different suits and project stages
> would
> >> be
> >> > >> one
> >> > >> > way also.
> >> > >> >
> >> > >> > Couldn't you also use BeanProvider to get the mock?
> >> > >> >
> >> > >> > For my app the tests that needs the real backend are in the jar
> >> with
> >> > all
> >> > >> > logic. They either need injects and real backends etc or I only
> >> need
> >> > >> JUnit
> >> > >> > and mockito.
> >> > >> >
> >> > >> > My web logic does not need db logic for tests so I have mocks
> with
> >> > just
> >> > >> > static entities. But here and there real backend is needed so I
> use
> >> > >> mocks
> >> > >> > with @Mock qualifier
> >> > >> >
> >> > >> >
> >> > >> >
> >> > >> > On 30 April 2014 22:04, Michael Li <[email protected]> wrote:
> >> > >> >
> >> > >> > > Those looks like global setting to me. In my unit tests
> scenario,
> >> > for
> >> > >> > > example, class A has an association with class B,
> >> > >> > >
> >> > >> > > In unit test class ATest, I like to inject the real A and
> mocked
> >> B
> >> > >> > > (produced in ATest class).
> >> > >> > > In unit test class BTest, I need inject the real B (not the
> >> mocked)
> >> > in
> >> > >> > > order to test it.
> >> > >> > >
> >> > >> > > How does the container know when I need a real and when I need
> a
> >> > >> mocked?
> >> > >> > > Does the scope (e.g. RequestScope) help here? For example, set
> >> the
> >> > >> > mocked B
> >> > >> > > produced in BeanA in "RequestScope".
> >> > >> > >
> >> > >> > > Thanks.
> >> > >> > >
> >> > >> > >
> >> > >> > > On Wed, Apr 30, 2014 at 12:45 PM, Gerhard Petracek <
> >> > >> > > [email protected]> wrote:
> >> > >> > >
> >> > >> > > > hi michael,
> >> > >> > > >
> >> > >> > > > you can use std. cdi mechanisms like @Alternative beans for
> >> your
> >> > >> mocks.
> >> > >> > > > just add and configure them in your test-module.
> >> > >> > > > or use @Exclude(exceptIfProjectStage =
> >> > ProjectStage.UnitTest.class)
> >> > >> > > > with that many projects could drop special mocking frameworks
> >> at
> >> > >> all.
> >> > >> > > >
> >> > >> > > > regards,
> >> > >> > > > gerhard
> >> > >> > > >
> >> > >> > > > http://www.irian.at
> >> > >> > > >
> >> > >> > > > Your JSF/JavaEE powerhouse -
> >> > >> > > > JavaEE Consulting, Development and
> >> > >> > > > Courses in English and German
> >> > >> > > >
> >> > >> > > > Professional Support for Apache MyFaces
> >> > >> > > >
> >> > >> > > >
> >> > >> > > >
> >> > >> > > > 2014-04-30 21:20 GMT+02:00 Michael Li <[email protected]
> >:
> >> > >> > > >
> >> > >> > > > > Hi Gerhard,
> >> > >> > > > >
> >> > >> > > > > Thanks for the reply.
> >> > >> > > > >
> >> > >> > > > > I did try the built-in test control. However it doesn't
> play
> >> > well
> >> > >> > with
> >> > >> > > > mock
> >> > >> > > > > framework like "Mockito". Basically the CDI container get
> >> > confused
> >> > >> > > > between
> >> > >> > > > > a mocked bean and the real bean from my production code. I
> >> don't
> >> > >> know
> >> > >> > > how
> >> > >> > > > > CDI-Unit solve the ambiguity, but the built-in test control
> >> > >> didn't by
> >> > >> > > > > default. If the built-in test control can work with mock
> with
> >> > some
> >> > >> > > > > configuration, I'd love to go with it.
> >> > >> > > > >
> >> > >> > > > > Michael.
> >> > >> > > > >
> >> > >> > > > >
> >> > >> > > > > On Wed, Apr 30, 2014 at 12:08 PM, Gerhard Petracek <
> >> > >> > > > > [email protected]> wrote:
> >> > >> > > > >
> >> > >> > > > > > hi michael,
> >> > >> > > > > >
> >> > >> > > > > > you could try [1] instead.
> >> > >> > > > > >
> >> > >> > > > > > regards,
> >> > >> > > > > > gerhard
> >> > >> > > > > >
> >> > >> > > > > > [1] http://deltaspike.apache.org/test-control.html
> >> > >> > > > > >
> >> > >> > > > > >
> >> > >> > > > > >
> >> > >> > > > > > http://www.irian.at
> >> > >> > > > > >
> >> > >> > > > > > Your JSF/JavaEE powerhouse -
> >> > >> > > > > > JavaEE Consulting, Development and
> >> > >> > > > > > Courses in English and German
> >> > >> > > > > >
> >> > >> > > > > > Professional Support for Apache MyFaces
> >> > >> > > > > >
> >> > >> > > > > >
> >> > >> > > > > > 2014-04-30 20:24 GMT+02:00 Michael Li <
> >> [email protected]>:
> >> > >> > > > > >
> >> > >> > > > > > > We're currently using CDI-Unit for CDI components
> >> testing.
> >> > >> > > However, I
> >> > >> > > > > > can't
> >> > >> > > > > > > inject my data repository (interface) into my unit test
> >> > >> classes.
> >> > >> > I
> >> > >> > > am
> >> > >> > > > > > > wondering if there is anything special to setup (to
> work
> >> > with
> >> > >> > > > CDI-Unit)
> >> > >> > > > > > or
> >> > >> > > > > > > other approach to unit test repository. The exception I
> >> got
> >> > is
> >> > >> > > pasted
> >> > >> > > > > as
> >> > >> > > > > > > below.
> >> > >> > > > > > >
> >> > >> > > > > > >
> >> > >> > > > > > > org.jboss.weld.exceptions.DeploymentException:
> >> WELD-001408:
> >> > >> > > > Unsatisfied
> >> > >> > > > > > > dependencies for type DomainRepository with qualifiers
> >> > >> @Default
> >> > >> > > > > > >   at injection point [UnbackedAnnotatedField] @Inject
> >> > >> > > > > > >
> >> > >> com.acme.server.repository.DomainRepositoryTest.domainRepository
> >> > >> > > > > > >   at
> >> > >> > > > > > >
> >> > >> > > > > > >
> >> > >> > > > > >
> >> > >> > > > >
> >> > >> > > >
> >> > >> > >
> >> > >> >
> >> > >>
> >> >
> >>
> com.acme.server.repository.DomainRepositoryTest.domainRepository(DomainRepositoryTest.java:0)
> >> > >> > > > > > >
> >> > >> > > > > > > at
> >> > >> > > > > > >
> >> > >> > > > > > >
> >> > >> > > > > >
> >> > >> > > > >
> >> > >> > > >
> >> > >> > >
> >> > >> >
> >> > >>
> >> >
> >>
> org.jboss.weld.bootstrap.Validator.validateInjectionPointForDeploymentProblems(Validator.java:368)
> >> > >> > > > > > > at
> >> > >> > > > > > >
> >> > >> > > > > > >
> >> > >> > > > > >
> >> > >> > > > >
> >> > >> > > >
> >> > >> > >
> >> > >> >
> >> > >>
> >> >
> >>
> org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:289)
> >> > >> > > > > > > at
> >> > >> > > > > > >
> >> > >> > > > > >
> >> > >> > > > >
> >> > >> > > >
> >> > >> > >
> >> > >> >
> >> > >>
> >> >
> >>
> org.jboss.weld.bootstrap.Validator.validateGeneralBean(Validator.java:135)
> >> > >> > > > > > > at
> >> > >> > > > >
> >> > >>
> org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:166)
> >> > >> > > > > > > at
> >> > >> > > >
> >> > org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:514)
> >> > >> > > > > > > at
> >> > >> > > > > > >
> >> > >> > > > > > >
> >> > >> > > > > >
> >> > >> > > > >
> >> > >> > > >
> >> > >> > >
> >> > >> >
> >> > >>
> >> >
> >>
> org.jboss.weld.bootstrap.ConcurrentValidator$1.doWork(ConcurrentValidator.java:68)
> >> > >> > > > > > > at
> >> > >> > > > > > >
> >> > >> > > > > > >
> >> > >> > > > > >
> >> > >> > > > >
> >> > >> > > >
> >> > >> > >
> >> > >> >
> >> > >>
> >> >
> >>
> org.jboss.weld.bootstrap.ConcurrentValidator$1.doWork(ConcurrentValidator.java:66)
> >> > >> > > > > > > at
> >> > >> > > > > > >
> >> > >> > > > > > >
> >> > >> > > > > >
> >> > >> > > > >
> >> > >> > > >
> >> > >> > >
> >> > >> >
> >> > >>
> >> >
> >>
> org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:60)
> >> > >> > > > > > > at
> >> > >> > > > > > >
> >> > >> > > > > > >
> >> > >> > > > > >
> >> > >> > > > >
> >> > >> > > >
> >> > >> > >
> >> > >> >
> >> > >>
> >> >
> >>
> org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:53)
> >> > >> > > > > > > at
> >> java.util.concurrent.FutureTask.run(FutureTask.java:266)
> >> > >> > > > > > > at
> >> > >> > > > > > >
> >> > >> > > > > > >
> >> > >> > > > > >
> >> > >> > > > >
> >> > >> > > >
> >> > >> > >
> >> > >> >
> >> > >>
> >> >
> >>
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
> >> > >> > > > > > > at
> >> > >> > > > > > >
> >> > >> > > > > > >
> >> > >> > > > > >
> >> > >> > > > >
> >> > >> > > >
> >> > >> > >
> >> > >> >
> >> > >>
> >> >
> >>
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
> >> > >> > > > > > > at java.lang.Thread.run(Thread.java:745)
> >> > >> > > > > > >
> >> > >> > > > > > >
> >> > >> > > > > > >
> >> > >> > > > > > > Thanks.
> >> > >> > > > > > >
> >> > >> > > > > > > --
> >> > >> > > > > > > Michael Li
> >> > >> > > > > > >
> >> > >> > > > > >
> >> > >> > > > >
> >> > >> > > > >
> >> > >> > > > >
> >> > >> > > > > --
> >> > >> > > > > Michael Li
> >> > >> > > > >
> >> > >> > > >
> >> > >> > >
> >> > >> > >
> >> > >> > >
> >> > >> > > --
> >> > >> > > Michael Li
> >> > >> > >
> >> > >> >
> >> > >>
> >> > >>
> >> > >>
> >> > >> --
> >> > >> Michael Li
> >> > >>
> >> > >
> >> > >
> >> >
> >>
> >>
> >>
> >> --
> >> Michael Li
> >>
> >
> >
>
>
> --
> Michael Li
>

Reply via email to