hi stephen, @#1: (by design) ds-test-control always uses/tests the whole application(/module+deps.) and the test-classpath the test is located in. you added a constellation in the test-classpath which violates the rules of cdi -> as you can see (in the logs), you caused an AmbiguousResolutionException because [1] and [2] lead to 2 beans of the same type (and qualifiers). that are std./plain cdi-rules and isn't related to any kind of alternative bean/s. since the test-classpath isn't isolated per test (because you test your application as a whole), all tests will fail in case you violate rules defined by cdi.
in this case you sometimes see diff. exceptions (as the last exception), because in our test-suite (to test ds-test-control itself) we have some consistency checks e.g. in @AfterClass callbacks. due to that you see e.g. an IllegalStateException instead of an AmbiguousResolutionException at the very end (but the first issue was always an AmbiguousResolutionException). in your own application it would/should be always just one exception in case you violate cdi-rules (in this case the AmbiguousResolutionException). @#2: i answered that already (following the std. cdi-rule/s you need to replace the producer-class and not the beans created by the producer). @"#3": you don't need 3 qualifiers for 3 producers for the test you shared. you need - @Exclude (or @Vetoed or @Typed() or nothing with cdi 1.1+ and bean-discovery-mode="annotated") for DefaultTestService, because you have DefaultTestServiceProducer which creates beans of type TestService020 (= std. cdi rules) - @Alternative for your alternative producer (which should replace DefaultTestServiceProducer) (= std. cdi rules) - a label to bind alternative-producer-x to test-x (+ the config for it in an active config-source like apache-deltaspike.properties) most is std. cdi and really easier than you (might) think. regards, gerhard [1] https://github.com/mores/deltaspike/blob/altProduces/deltaspike/modules/test-control/impl/src/test/java/org/apache/deltaspike/test/testcontrol/uc020/DefaultTestServiceProducer.java [2] https://github.com/mores/deltaspike/blob/altProduces/deltaspike/modules/test-control/impl/src/test/java/org/apache/deltaspike/test/testcontrol/uc020/DefaultTestService.java http://www.irian.at Your JavaEE powerhouse - JavaEE Consulting, Development and Courses in English and German Professional Support for Apache MyFaces, DeltaSpike and OpenWebBeans 2018-04-16 16:21 GMT+02:00 Stephen More <[email protected]>: > Ok, I updated my code, I had to add 3 Qualifiers to fix all other tests. > > I now have 3 producers. > > I think it should be working as is but I still see: > > TestServiceLabelBTest.resultB:44 expected:<[result-b]> but > was:<[default-result]> > TestServiceTestLabelATest.resultA:44 expected:<[result-a]> but > was:<[default-result]> > > > > On Mon, Apr 16, 2018 at 8:22 AM, Stephen More <[email protected]> > wrote: > > > Usually I work on multiple tasks at a time, and I might not communicate > as > > well as I should. I will try to be a little more verbose. > > > > Before I added DefaultTestServiceProducer to uc020, mvn clean install > > was working as expected "Tests run: 65, Failures: 0, Errors: 0, Skipped: > 0" > > > > By simply adding DefaultTestServiceProducer to uc020 I did not expect to > > get "Tests run: 53, Failures: 6, Errors: 22, Skipped: 0" > > > > 1. At this point I am no longer focusing on getting my uc020 to pass, but > > rather what the heck did I just do.....what caused this ? Is something > else > > bigger going on that will cause my use case to fail anyway ? > > > > 2. In parallel I am also working on a private branch to get Alternate > > Producers working....( again not working as expected ). > > > > I am at a loss to explain what is going on in 1, and 2 I think should be > > working, but is not. > > > > > > Why did my DefaultTestServiceProducer create all this havoc ? > > > > > > > > > > Failed tests: > > InterceptedBeanTest.classLevelInterception:52 > > InterceptedBeanTest.methodLevelInterception:60 > > TestServiceLabelYTest.resultY:44 expected:<[result-y]> but > > was:<[default-result]> > > TestServiceTestLabelXTest.resultX:44 expected:<[result-x]> but > > was:<[default-result]> > > LabeledServiceTest.resultLbl:45 expected:<[result-lbl]> but > > was:<[alternative-result]> > > TestServiceLabelXTest.resultX:43 expected:<result-[x]> but > > was:<result-[y]> > > Tests in error: > > MockedRequestScopedBeanTest.org.apache.deltaspike.test. > > testcontrol.mock.uc001.MockedRequestScopedBeanTest » Deployment > > MockedSessionScopedBeanAcrossMethodsTest.org.apache. > > deltaspike.test.testcontrol.mock.uc003.MockedSessionScopedBeanAcrossM > ethodsTest > > » Deployment > > MockedProducedBeanTest.org.apache.deltaspike.test. > > testcontrol.mock.uc005.MockedProducedBeanTest » Deployment > > MockedTypedBeanTest.org.apache.deltaspike.test.testcontrol.mock.uc008. > MockedTypedBeanTest > > » Deployment > > MockedTypedProducedBeanTest.org.apache.deltaspike.test. > > testcontrol.mock.uc009.MockedTypedProducedBeanTest » Deployment > > MockedRequestScopedBeanWithInjectionTest.org.apache. > > deltaspike.test.testcontrol.mock.uc012.MockedRequestScopedBeanWithInj > ectionTest > > » Deployment > > MockedTypedProducedBeanTest.org.apache.deltaspike.test. > > testcontrol.mock.uc013.MockedTypedProducedBeanTest » Deployment > > MockedTypedProducedBeanTest.org.apache.deltaspike.test. > > testcontrol.mock.uc014.MockedTypedProducedBeanTest » Deployment > > org.apache.deltaspike.test.testcontrol.uc001. > > RequestAndSessionScopePerTestMethodTest.org.apache. > > deltaspike.test.testcontrol.uc001.RequestAndSessionScopePerTestM > ethodTest > > Run 1: RequestAndSessionScopePerTestMethodTest.org.apache. > > deltaspike.test.testcontrol.uc001.RequestAndSessionScopePerTestM > ethodTest > > » Deployment > > Run 2: RequestAndSessionScopePerTestMethodTest.finalCheckAndCleanup:99 > > IllegalState u... > > > > org.apache.deltaspike.test.testcontrol.uc002. > SessionScopePerTestClassTest. > > org.apache.deltaspike.test.testcontrol.uc002. > SessionScopePerTestClassTest > > Run 1: SessionScopePerTestClassTest.org.apache.deltaspike.test. > > testcontrol.uc002.SessionScopePerTestClassTest » Deployment > > Run 2: SessionScopePerTestClassTest.finalCheckAndCleanup:93 > > IllegalState unexpected i... > > > > SessionScopePerTestClassTest.org.apache.deltaspike.test. > > testcontrol.uc003.SessionScopePerTestClassTest » Deployment > > org.apache.deltaspike.test.testcontrol.uc004. > ProjectStageTestControlTest. > > org.apache.deltaspike.test.testcontrol.uc004.ProjectStageTestControlTest > > Run 1: ProjectStageTestControlTest.org.apache.deltaspike.test. > > testcontrol.uc004.ProjectStageTestControlTest » Deployment > > Run 2: ProjectStageTestControlTest>RequestAndSessionScopePerTestM > > ethodTest.finalCheckAndCleanup:99 » IllegalState > > > > SkipExternalContainerTest.org.apache.deltaspike.test. > testcontrol.uc006.SkipExternalContainerTest > > » Deployment > > ExtendedTest.org.apache.deltaspike.test.testcontrol.uc007.ExtendedTest > > » Deployment > > JsfContainerPerTestMethodTest.org.apache.deltaspike.test. > > testcontrol.uc010.JsfContainerPerTestMethodTest » Deployment > > InterceptedBeanTest.org.apache.deltaspike.test.testcontrol.uc011. > InterceptedBeanTest > > » Deployment > > TestServiceNoLabelTest.org.apache.deltaspike.test.testcontrol.uc014. > TestServiceNoLabelTest > > » Deployment > > AlternativeServiceTest.org.apache.deltaspike.test.testcontrol.uc015. > AlternativeServiceTest > > » Deployment > > TestServiceLabelYTest.org.apache.deltaspike.test.testcontrol.uc016. > TestServiceLabelYTest > > » Deployment > > TestServiceLabelBTest.resultB » AmbiguousResolution There is more than > > one Bea... > > TestServiceNoLabelTest.org.apache.deltaspike.test.testcontrol.uc020. > TestServiceNoLabelTest > > » Deployment > > TestServiceTestLabelATest.org.apache.deltaspike.test. > testcontrol.uc020.TestServiceTestLabelATest > > » Deployment > > > > > > > > On Mon, Apr 16, 2018 at 1:33 AM, Gerhard Petracek < > > [email protected]> wrote: > > > >> hi stephen, > >> > >> you only have one producer-class: > >> https://github.com/mores/deltaspike/blob/altProduces/deltasp > >> ike/modules/test-control/impl/src/test/java/org/apache/ > >> deltaspike/test/testcontrol/uc020/DefaultTestServiceProducer.java > >> > >> and @Alternative is only present at: > >> https://github.com/mores/deltaspike/blob/altProduces/deltasp > >> ike/modules/test-control/impl/src/test/java/org/apache/ > >> deltaspike/test/testcontrol/uc020/TestServiceLabelA.java#L24 > >> and > >> https://github.com/mores/deltaspike/blob/altProduces/deltasp > >> ike/modules/test-control/impl/src/test/java/org/apache/ > >> deltaspike/test/testcontrol/uc020/TestServiceLabelB.java#L24 > >> > >> instead you need an alternative producer-class (to replace > >> DefaultTestServiceProducer in your case). > >> > >> regards, > >> gerhard > >> > >> http://www.irian.at > >> > >> Your JavaEE powerhouse - > >> JavaEE Consulting, Development and > >> Courses in English and German > >> > >> Professional Support for Apache > >> MyFaces, DeltaSpike and OpenWebBeans > >> > >> 2018-04-15 21:02 GMT+02:00 Stephen More <[email protected]>: > >> > >> > Correct. I have a default producer and 1 alternate producer. I can > >> enable > >> > the alternate producer by updating beans.xml. > >> > I am trying to do the same thing using labeledAlternatives.... > >> > > >> > what changes should be made to META-INF/apache-deltaspike.properties > >> when > >> > using multiple alternate producers ? > >> > > >> > > >> > labeledAlternatives[testLabelX].org.apache. > deltaspike.test.testcontrol. > >> > uc014.TestService=org.apache.deltaspike.test.testcontrol.uc014. > >> > TestServiceLabelXProducer > >> > labeledAlternatives[y].org.apache.deltaspike.test. > >> > testcontrol.uc014.TestService=org.apache.deltaspike.test. > >> > testcontrol.uc014.TestServiceLabelYProducer > >> > > >> > > >> > ? > >> > > >> > > >> > > >> > > >> > On Sun, Apr 15, 2018 at 1:22 PM, Gerhard Petracek < > >> > [email protected]> wrote: > >> > > >> > > hi stephen, > >> > > > >> > > as usual with cdi, you need to create an alternative-producer (= the > >> > > producer-bean itself needs to be replaced). > >> > > > >> > > regards, > >> > > gerhard > >> > > > >> > > http://www.irian.at > >> > > > >> > > Your JavaEE powerhouse - > >> > > JavaEE Consulting, Development and > >> > > Courses in English and German > >> > > > >> > > Professional Support for Apache > >> > > MyFaces, DeltaSpike and OpenWebBeans > >> > > > >> > > > >> > > > >> > > 2018-04-15 14:41 GMT+02:00 Stephen More <[email protected]>: > >> > > > >> > > > "alternative-bean-x1 (instead of bean-x) in test1 > >> > > > and alternative-bean-x2 (instead of bean-x) in test2" > >> > > > > >> > > > Yes, this is exactly what I am going after, unfortunately I have > not > >> > > gotten > >> > > > it to work yet. In my case bean-x comes from a producer. > >> > > > > >> > > > Not sure if that is my problem so I started working on a use > case, I > >> > > made a > >> > > > clone of uc014 -> uc020 ( fixed name collisions in > >> > > > apache-deltaspike.properties ) but many other test cases started > to > >> > fail > >> > > > outside of uc020. ( https://github.com/mores/ > >> > > deltaspike/tree/altProduces > >> > > > ) > >> > > > > >> > > > Is this a possible bug ? > >> > > > -Thanks > >> > > > > >> > > > > >> > > > p.s. when a typo is made in apache-deltaspike.properties no > warning > >> or > >> > > > error was thrown that I could easily see > >> > > > > >> > > > > >> > > > > >> > > > On Sat, Apr 14, 2018 at 12:18 PM, Gerhard Petracek < > >> > > > [email protected]> wrote: > >> > > > > >> > > > > hi stephen, > >> > > > > > >> > > > > if your alternative-instance/behavior should be different for > >> "every" > >> > > > test > >> > > > > and you can't use a mock-manager, you need to use a producer > (for > >> the > >> > > > > original bean) and @Specializes it in the test-classpath. > >> > > > > in your test you change the state of the test-producer with > static > >> > > > methods > >> > > > > (e.g. set a flag or a whole instance which should be returned by > >> the > >> > > > > test-producer). > >> > > > > -> it's std. cdi and/or java - no special concept is needed. > >> > > > > > >> > > > > if you would like to use alternative-bean-x1 (instead of bean-x) > >> in > >> > > test1 > >> > > > > and alternative-bean-x2 (instead of bean-x) in test2, you can > use > >> > > > labeled > >> > > > > alternatives (provided by ds > v1.8.1) - see e.g. [1] and [2]. > >> > > > > it's based on the new AlternativeBeanClassProvider spi (which > you > >> > could > >> > > > use > >> > > > > as well to implement your own concepts) - see e.g. [3]. > >> > > > > > >> > > > > regards, > >> > > > > gerhard > >> > > > > > >> > > > > [1] > >> > > > > https://github.com/apache/deltaspike/tree/master/ > >> > > > deltaspike/modules/test- > >> > > > > control/impl/src/test/java/org/apache/deltaspike/test/ > >> > > testcontrol/uc014 > >> > > > > [2] > >> > > > > https://github.com/apache/deltaspike/tree/master/ > >> > > > deltaspike/modules/test- > >> > > > > control/impl/src/test/java/org/apache/deltaspike/test/ > >> > > testcontrol/uc015 > >> > > > > [3] > >> > > > > https://github.com/apache/deltaspike/tree/master/ > >> > > > deltaspike/modules/test- > >> > > > > control/impl/src/test/java/org/apache/deltaspike/test/ > >> > > testcontrol/uc016 > >> > > > > > >> > > > > > >> > > > > > >> > > > > http://www.irian.at > >> > > > > > >> > > > > Your JavaEE powerhouse - > >> > > > > JavaEE Consulting, Development and > >> > > > > Courses in English and German > >> > > > > > >> > > > > Professional Support for Apache > >> > > > > MyFaces, DeltaSpike and OpenWebBeans > >> > > > > > >> > > > > 2018-04-14 15:24 GMT+02:00 Stephen More <[email protected] > >: > >> > > > > > >> > > > > > I have a need to run some unit tests with @Alternative - > >> > > mockedVersionA > >> > > > > > and other tests with @Alternative - mockedVersionB > >> > > > > > and other tests with @Alternative - mockedVersionC > >> > > > > > > >> > > > > > It looks like Arquillian can handle this utilizing ShrinkWrap > >> and > >> > > > > > @Deployment.... > >> > > > > > addAsManifestResource( "mockedVersionA.xml","beans.xml"); > >> > > > > > addAsManifestResource( "mockedVersionB.xml","beans.xml"); > >> > > > > > > >> > > > > > Can I achieve the same functionality using CdiTestRunner ? > >> > > > > > -Thanks > >> > > > > > > >> > > > > > >> > > > > >> > > > >> > > >> > > > > >
