Re: AW: Interceptors not being called in JUnit-aware CDI environment
Side note: you can also use a JUnit @Rule ;) Romain Manni-Bucau Twitter: @rmannibucau Blog: http://rmannibucau.wordpress.com/ LinkedIn: http://fr.linkedin.com/in/rmannibucau Github: https://github.com/rmannibucau 2014-02-07 Gerhard Petracek : > hi heiko, > > you can use CdiTestRunner + configure true for: > deltaspike.testcontrol.use_test_class_as_cdi_bean > > 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-02-07 : > >> Hello Mark, >> >> thank you for your input. Your idea would have been much easier than what >> I did :-) >> >> When you write a Junit Runner, you have the ability to control the test >> class creation by overwriting createTest() and returning your instance. By >> default this is simply the newInstance() call for the constructor with no >> arguments of the test class. The following code will therefore not only >> provide injection but even create a fully creational contexted bean that >> even will trigger interceptors. I've made sure though, that after calling >> all 'AfterClass'-Annotations, the creational context is released too, so >> the bean does not stick around. >> >> I do not really have a clue though how this could be done with TestNg. >> >> I might miss out some clearContexts() here. I thought about cleaning the >> contexts before a new test-method is run, however I loose all beans >> discovered and created while the container booted, and that lead to failing >> tests. I need the container being created BEFORE createTest() is called to >> be able to do the bean creation. I have to dive into this more deeply. >> Another Idea would be to simply boot the container again before each method >> and shut it down afterwards, though this will slow down tests. >> >> public class TestRunner extends BlockJUnit4ClassRunner >> { >> private Class clazz; >> private CreationalContext creationalContext; >> >> public TestRunner(final Class clazz) throws InitializationError >> { >> super(clazz); >> >> this.clazz = clazz; >> >> cdiContainer = CdiContainerLoader.getCdiContainer(); >> cdiContainer.boot(); >> cdiContainer.getContextControl().startContexts(); >> } >> >> @Override >> protected Object createTest() >> throws Exception >> { >> return createTest(clazz); >> } >> >> @SuppressWarnings("unchecked") >> private T createTest(final Class testClass) throws Exception >> { >> final BeanManager beanManager = cdiContainer.getBeanManager(); >> >> final Set> beans = beanManager.getBeans(testClass); >> >> assert !beans.isEmpty(); >> >> final Bean bean = beans.iterator().next(); >> creationalContext = beanManager.createCreationalContext(bean); >> >> final T result = (T) beanManager.getReference(bean, testClass, >> creationalContext); >> >> return result; >> } >> >> @Override >> protected Statement withAfterClasses(final Statement statement) >> { >> final Statement defaultStatement = >> super.withAfterClasses(statement); >> >> return new Statement() >> { >> >> @Override >> public void evaluate() >> throws Throwable >> { >> try >> { >> defaultStatement.evaluate(); >> } >> finally >> { >> creationalContext.release(); >> } >> } >> >> }; >> } >> >> Regards, >> >> Heiko >> >> > -Ursprüngliche Nachricht- >> > Von: Mark Struberg [mailto:strub...@yahoo.de] >> > Gesendet: Freitag, 7. Februar 2014 09:29 >> > An: dev@deltaspike.apache.org >> > Betreff: Re: AW: Interceptors not being called in JUnit-aware CDI >> environment >> > >> > = >> > == >> > >> > ATTENTION! This message contains suspicious URL(s) possibly redirecting >> to >> > malicious content. Our security gateways target known problem URLs like >> > freeweb or URL Shortene
Re: AW: Interceptors not being called in JUnit-aware CDI environment
hi heiko, you can use CdiTestRunner + configure true for: deltaspike.testcontrol.use_test_class_as_cdi_bean 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-02-07 : > Hello Mark, > > thank you for your input. Your idea would have been much easier than what > I did :-) > > When you write a Junit Runner, you have the ability to control the test > class creation by overwriting createTest() and returning your instance. By > default this is simply the newInstance() call for the constructor with no > arguments of the test class. The following code will therefore not only > provide injection but even create a fully creational contexted bean that > even will trigger interceptors. I've made sure though, that after calling > all 'AfterClass'-Annotations, the creational context is released too, so > the bean does not stick around. > > I do not really have a clue though how this could be done with TestNg. > > I might miss out some clearContexts() here. I thought about cleaning the > contexts before a new test-method is run, however I loose all beans > discovered and created while the container booted, and that lead to failing > tests. I need the container being created BEFORE createTest() is called to > be able to do the bean creation. I have to dive into this more deeply. > Another Idea would be to simply boot the container again before each method > and shut it down afterwards, though this will slow down tests. > > public class TestRunner extends BlockJUnit4ClassRunner > { > private Class clazz; > private CreationalContext creationalContext; > > public TestRunner(final Class clazz) throws InitializationError > { > super(clazz); > > this.clazz = clazz; > > cdiContainer = CdiContainerLoader.getCdiContainer(); > cdiContainer.boot(); > cdiContainer.getContextControl().startContexts(); > } > > @Override > protected Object createTest() > throws Exception > { > return createTest(clazz); > } > > @SuppressWarnings("unchecked") > private T createTest(final Class testClass) throws Exception > { > final BeanManager beanManager = cdiContainer.getBeanManager(); > > final Set> beans = beanManager.getBeans(testClass); > > assert !beans.isEmpty(); > > final Bean bean = beans.iterator().next(); > creationalContext = beanManager.createCreationalContext(bean); > > final T result = (T) beanManager.getReference(bean, testClass, > creationalContext); > > return result; > } > > @Override > protected Statement withAfterClasses(final Statement statement) > { > final Statement defaultStatement = > super.withAfterClasses(statement); > > return new Statement() > { > > @Override > public void evaluate() > throws Throwable > { > try > { > defaultStatement.evaluate(); > } > finally > { > creationalContext.release(); > } > } > > }; > } > > Regards, > > Heiko > > > -Ursprüngliche Nachricht- > > Von: Mark Struberg [mailto:strub...@yahoo.de] > > Gesendet: Freitag, 7. Februar 2014 09:29 > > An: dev@deltaspike.apache.org > > Betreff: Re: AW: Interceptors not being called in JUnit-aware CDI > environment > > > > = > > == > > > > ATTENTION! This message contains suspicious URL(s) possibly redirecting > to > > malicious content. Our security gateways target known problem URLs like > > freeweb or URL Shorteners that are being abused by spammers. Some > > examples would be groups.google.com or tinyurl.com. Please check the > sender > > and hyperlinks in the e-mail accurately before clicking on a link. If > this email > > seems obviously bad to you please delete it. More information is > available on > > our website Information Security @ Daimler: > http://intra.corpintra.net/intra- > > is-e/spam > > > > = > > == > > > > ACHTUNG! Diese E-Mail enthält verdächtige URLs welche möglicherweise auf > > schädlichen Inhalt verweisen. Die Security Gateways prüfen auf bekannte > > Problem-URLs wie zum Beispiel URL-Abkürzungen, die bevo
AW: AW: Interceptors not being called in JUnit-aware CDI environment
Hello Mark, thank you for your input. Your idea would have been much easier than what I did :-) When you write a Junit Runner, you have the ability to control the test class creation by overwriting createTest() and returning your instance. By default this is simply the newInstance() call for the constructor with no arguments of the test class. The following code will therefore not only provide injection but even create a fully creational contexted bean that even will trigger interceptors. I've made sure though, that after calling all 'AfterClass'-Annotations, the creational context is released too, so the bean does not stick around. I do not really have a clue though how this could be done with TestNg. I might miss out some clearContexts() here. I thought about cleaning the contexts before a new test-method is run, however I loose all beans discovered and created while the container booted, and that lead to failing tests. I need the container being created BEFORE createTest() is called to be able to do the bean creation. I have to dive into this more deeply. Another Idea would be to simply boot the container again before each method and shut it down afterwards, though this will slow down tests. public class TestRunner extends BlockJUnit4ClassRunner { private Class clazz; private CreationalContext creationalContext; public TestRunner(final Class clazz) throws InitializationError { super(clazz); this.clazz = clazz; cdiContainer = CdiContainerLoader.getCdiContainer(); cdiContainer.boot(); cdiContainer.getContextControl().startContexts(); } @Override protected Object createTest() throws Exception { return createTest(clazz); } @SuppressWarnings("unchecked") private T createTest(final Class testClass) throws Exception { final BeanManager beanManager = cdiContainer.getBeanManager(); final Set> beans = beanManager.getBeans(testClass); assert !beans.isEmpty(); final Bean bean = beans.iterator().next(); creationalContext = beanManager.createCreationalContext(bean); final T result = (T) beanManager.getReference(bean, testClass, creationalContext); return result; } @Override protected Statement withAfterClasses(final Statement statement) { final Statement defaultStatement = super.withAfterClasses(statement); return new Statement() { @Override public void evaluate() throws Throwable { try { defaultStatement.evaluate(); } finally { creationalContext.release(); } } }; } Regards, Heiko > -Ursprüngliche Nachricht- > Von: Mark Struberg [mailto:strub...@yahoo.de] > Gesendet: Freitag, 7. Februar 2014 09:29 > An: dev@deltaspike.apache.org > Betreff: Re: AW: Interceptors not being called in JUnit-aware CDI environment > > = > == > > ATTENTION! This message contains suspicious URL(s) possibly redirecting to > malicious content. Our security gateways target known problem URLs like > freeweb or URL Shorteners that are being abused by spammers. Some > examples would be groups.google.com or tinyurl.com. Please check the sender > and hyperlinks in the e-mail accurately before clicking on a link. If this > email > seems obviously bad to you please delete it. More information is available on > our website Information Security @ Daimler: http://intra.corpintra.net/intra- > is-e/spam > > = > == > > ACHTUNG! Diese E-Mail enthält verdächtige URLs welche möglicherweise auf > schädlichen Inhalt verweisen. Die Security Gateways prüfen auf bekannte > Problem-URLs wie zum Beispiel URL-Abkürzungen, die bevorzugt von > Spammern mißbraucht werden (tinyurl.com, groups.google.com, ...). Bitte > prüfen Sie den Absender und die URLs in dieser E-Mail gewissenhaft bevor sie > die verknüpften Inhalte aufrufen. Bitte löschen Sie diese E-Mail, wenn Sie der > Meinung sind, daß sich der Verdacht bestätigt. Weitere Informationen zu > unerwünschter E-Mail / SPAM finden Sie auf den Seiten der > Informationssicherheit bei Daimler unter: http://intra.corpintra.net/intra-is- > d/spam > > = > == > > > Hi Heiko! > > Afaik all unit runners (junit, testng) do create and manage the test class > instances themselfs. We only do injection into those existing instances. With > other words: we just fill the injection points. Whenever I need to have an > intercepted method, I create a public
Re: AW: Interceptors not being called in JUnit-aware CDI environment
Hi Heiko! Afaik all unit runners (junit, testng) do create and manage the test class instances themselfs. We only do injection into those existing instances. With other words: we just fill the injection points. Whenever I need to have an intercepted method, I create a public static inner class in my test. E.g. when I need a @Transactional DbHelper with a cleanup() method which should run in an own transaction. private @Inject DbHelper dbHelper; pubic static class DbHelper { private @Inject EntityManager em; @Transactional public void cleanupDb() { em. } } @Before public void doCleanup() { cleanInstances() // restart session and request scoped context dbHelper.cleanupDb(); cleanInstances() // again to ensure the test has clean instances and the em got closed } LieGrue, strub On Friday, 7 February 2014, 9:13, "it-media.k...@daimler.com" wrote: Hey Romain, > >that was the missing piece of the puzzle and lets me step down in >embarrassment for such an idiotic mistake. I've had the assumtion that for a >maven surefire test, the beans.xml provided in src/main/resources/META-INF >which IS obviously used, is enough, but after you pointed this out, I simply >added another one under src/test/resources/META-INF and voilá, getBeans() >returns a Bean that I can retrieve an instance from, that indeed will make >interceptors work. > >Thank you very much for your help, > >Heiko > >> -Ursprüngliche Nachricht- >> Von: Romain Manni-Bucau [mailto:rmannibu...@gmail.com] >> Gesendet: Freitag, 7. Februar 2014 08:55 >> An: dev@deltaspike.apache.org >> Betreff: Re: Interceptors not being called in JUnit-aware CDI environment >> >> = >> == >> >> ATTENTION! This message contains suspicious URL(s) possibly redirecting to >> malicious content. Our security gateways target known problem URLs like >> freeweb or URL Shorteners that are being abused by spammers. Some >> examples would be groups.google.com or tinyurl.com. Please check the sender >> and hyperlinks in the e-mail accurately before clicking on a link. If this >> email >> seems obviously bad to you please delete it. More information is available >> on >> our website Information Security @ Daimler: http://intra.corpintra.net/intra- >> is-e/spam >> >> = >> == >> >> ACHTUNG! Diese E-Mail enthält verdächtige URLs welche möglicherweise auf >> schädlichen Inhalt verweisen. Die Security Gateways prüfen auf bekannte >> Problem-URLs wie zum Beispiel URL-Abkürzungen, die bevorzugt von >> Spammern mißbraucht werden (tinyurl.com, groups.google.com, ...). Bitte >> prüfen Sie den Absender und die URLs in dieser E-Mail gewissenhaft bevor sie >> die verknüpften Inhalte aufrufen. Bitte löschen Sie diese E-Mail, wenn Sie >> der >> Meinung sind, daß sich der Verdacht bestätigt. Weitere Informationen zu >> unerwünschter E-Mail / SPAM finden Sie auf den Seiten der >> Informationssicherheit bei Daimler unter: >> http://intra.corpintra.net/intra-is- >> d/spam >> >> = >> == >> >> >> is you test class scanned by cdi? I mean did you provide a META- >> INF/beans.xml for tests? >> Romain Manni-Bucau >> Twitter: @rmannibucau >> Blog: http://rmannibucau.wordpress.com/ >> LinkedIn: http://fr.linkedin.com/in/rmannibucau >> Github: https://github.com/rmannibucau >> >> >> >> 2014-02-07 : >> > Hello Romain, >> > >> > thank you for your fast response. Yes I want to intercept the test itself. >> > >> > I've checked into various ways on how to actually create a bean, however >> nothing worked out. You mention to call beanManager.getXXX() but for my >> point that is not enough information. >> > >> > I tried to retrieve the beans of the test class via beanManager.getBeans() >> > but >> regardless of what I try as annotation literals there (non, Any, etc.) >> nothing >> works, the list is always empty. What method exactly did you have in mind >> here? >> > >> > Thanks, >> > >> > Heiko >> > >> >> -Ursprüngliche Nachricht- >> >> Von: Romain Manni-Bucau [mailto:rmannibu...@gmail.com] >> >> Gesendet: Freitag, 7. Februar 2014 08:26 >> >> An: dev@deltaspike.apache.org >> >> Betreff: Re: Interceptors not being called in JUnit-aware CDI >> >> environment >> >> >> >
AW: Interceptors not being called in JUnit-aware CDI environment
Hey Romain, that was the missing piece of the puzzle and lets me step down in embarrassment for such an idiotic mistake. I've had the assumtion that for a maven surefire test, the beans.xml provided in src/main/resources/META-INF which IS obviously used, is enough, but after you pointed this out, I simply added another one under src/test/resources/META-INF and voilá, getBeans() returns a Bean that I can retrieve an instance from, that indeed will make interceptors work. Thank you very much for your help, Heiko > -Ursprüngliche Nachricht- > Von: Romain Manni-Bucau [mailto:rmannibu...@gmail.com] > Gesendet: Freitag, 7. Februar 2014 08:55 > An: dev@deltaspike.apache.org > Betreff: Re: Interceptors not being called in JUnit-aware CDI environment > > = > == > > ATTENTION! This message contains suspicious URL(s) possibly redirecting to > malicious content. Our security gateways target known problem URLs like > freeweb or URL Shorteners that are being abused by spammers. Some > examples would be groups.google.com or tinyurl.com. Please check the sender > and hyperlinks in the e-mail accurately before clicking on a link. If this > email > seems obviously bad to you please delete it. More information is available on > our website Information Security @ Daimler: http://intra.corpintra.net/intra- > is-e/spam > > = > == > > ACHTUNG! Diese E-Mail enthält verdächtige URLs welche möglicherweise auf > schädlichen Inhalt verweisen. Die Security Gateways prüfen auf bekannte > Problem-URLs wie zum Beispiel URL-Abkürzungen, die bevorzugt von > Spammern mißbraucht werden (tinyurl.com, groups.google.com, ...). Bitte > prüfen Sie den Absender und die URLs in dieser E-Mail gewissenhaft bevor sie > die verknüpften Inhalte aufrufen. Bitte löschen Sie diese E-Mail, wenn Sie der > Meinung sind, daß sich der Verdacht bestätigt. Weitere Informationen zu > unerwünschter E-Mail / SPAM finden Sie auf den Seiten der > Informationssicherheit bei Daimler unter: http://intra.corpintra.net/intra-is- > d/spam > > = > == > > > is you test class scanned by cdi? I mean did you provide a META- > INF/beans.xml for tests? > Romain Manni-Bucau > Twitter: @rmannibucau > Blog: http://rmannibucau.wordpress.com/ > LinkedIn: http://fr.linkedin.com/in/rmannibucau > Github: https://github.com/rmannibucau > > > > 2014-02-07 : > > Hello Romain, > > > > thank you for your fast response. Yes I want to intercept the test itself. > > > > I've checked into various ways on how to actually create a bean, however > nothing worked out. You mention to call beanManager.getXXX() but for my > point that is not enough information. > > > > I tried to retrieve the beans of the test class via beanManager.getBeans() > > but > regardless of what I try as annotation literals there (non, Any, etc.) nothing > works, the list is always empty. What method exactly did you have in mind > here? > > > > Thanks, > > > > Heiko > > > >> -----Ursprüngliche Nachricht- > >> Von: Romain Manni-Bucau [mailto:rmannibu...@gmail.com] > >> Gesendet: Freitag, 7. Februar 2014 08:26 > >> An: dev@deltaspike.apache.org > >> Betreff: Re: Interceptors not being called in JUnit-aware CDI > >> environment > >> > >> > = > >> == > >> > >> ATTENTION! This message contains suspicious URL(s) possibly > >> redirecting to malicious content. Our security gateways target known > >> problem URLs like freeweb or URL Shorteners that are being abused by > >> spammers. Some examples would be groups.google.com or tinyurl.com. > >> Please check the sender and hyperlinks in the e-mail accurately > >> before clicking on a link. If this email seems obviously bad to you > >> please delete it. More information is available on our website > >> Information Security @ Daimler: http://intra.corpintra.net/intra- > >> is-e/spam > >> > >> > = > >> == > >> > >> ACHTUNG! Diese E-Mail enthält verdächtige URLs welche möglicherweise > >> auf schädlichen Inhalt verweisen. Die Security Gateways prüfen auf > >> bekannte Problem-URLs wie zum Beispiel URL-Abkürzungen, die > >> bevorzugt von Spammern mißbraucht werden (tinyurl.com, > >> groups.google.com, ...). Bitte prüfen Sie den Absender und die URLs > >> in diese
Re: Interceptors not being called in JUnit-aware CDI environment
is you test class scanned by cdi? I mean did you provide a META-INF/beans.xml for tests? Romain Manni-Bucau Twitter: @rmannibucau Blog: http://rmannibucau.wordpress.com/ LinkedIn: http://fr.linkedin.com/in/rmannibucau Github: https://github.com/rmannibucau 2014-02-07 : > Hello Romain, > > thank you for your fast response. Yes I want to intercept the test itself. > > I've checked into various ways on how to actually create a bean, however > nothing worked out. You mention to call beanManager.getXXX() but for my point > that is not enough information. > > I tried to retrieve the beans of the test class via beanManager.getBeans() > but regardless of what I try as annotation literals there (non, Any, etc.) > nothing works, the list is always empty. What method exactly did you have in > mind here? > > Thanks, > > Heiko > >> -Ursprüngliche Nachricht- >> Von: Romain Manni-Bucau [mailto:rmannibu...@gmail.com] >> Gesendet: Freitag, 7. Februar 2014 08:26 >> An: dev@deltaspike.apache.org >> Betreff: Re: Interceptors not being called in JUnit-aware CDI environment >> >> = >> == >> >> ATTENTION! This message contains suspicious URL(s) possibly redirecting to >> malicious content. Our security gateways target known problem URLs like >> freeweb or URL Shorteners that are being abused by spammers. Some >> examples would be groups.google.com or tinyurl.com. Please check the sender >> and hyperlinks in the e-mail accurately before clicking on a link. If this >> email >> seems obviously bad to you please delete it. More information is available >> on >> our website Information Security @ Daimler: http://intra.corpintra.net/intra- >> is-e/spam >> >> = >> == >> >> ACHTUNG! Diese E-Mail enthält verdächtige URLs welche möglicherweise auf >> schädlichen Inhalt verweisen. Die Security Gateways prüfen auf bekannte >> Problem-URLs wie zum Beispiel URL-Abkürzungen, die bevorzugt von >> Spammern mißbraucht werden (tinyurl.com, groups.google.com, ...). Bitte >> prüfen Sie den Absender und die URLs in dieser E-Mail gewissenhaft bevor sie >> die verknüpften Inhalte aufrufen. Bitte löschen Sie diese E-Mail, wenn Sie >> der >> Meinung sind, daß sich der Verdacht bestätigt. Weitere Informationen zu >> unerwünschter E-Mail / SPAM finden Sie auf den Seiten der >> Informationssicherheit bei Daimler unter: >> http://intra.corpintra.net/intra-is- >> d/spam >> >> = >> == >> >> >> HI >> >> You want to intercept the test? so it means the runner needs to invoke >> "business" methods of the test class which is not the case by default (ie >> result >> shouldn't be built from a newInstance() but from a beanManager.getXXX()). >> Romain Manni-Bucau >> Twitter: @rmannibucau >> Blog: http://rmannibucau.wordpress.com/ >> LinkedIn: http://fr.linkedin.com/in/rmannibucau >> Github: https://github.com/rmannibucau >> >> >> >> 2014-02-07 : >> > Hello, >> > >> > I've been trying to start the CDI container during Junit-Testing as >> > described at the following page, >> > >> > http://struberg.wordpress.com/2012/03/27/unit-testing-strategies-for-c >> > di-based-projects/ >> > >> > though I'm using Junit 4 and implemented everything using a new Runner (to >> annotate tests with @RunWith). I kind of got inspired by he CDIUnit project, >> but >> it works only with Weld and I want to use OpenWebBeans. >> > The major things like injection work perfectly, however, I realized, that >> > even >> though I implemented the following code to provided a CDI aware Test-Class, >> an interceptor annotation on a test method is completely ignored, thus the >> interceptors AroundInvoke annotated method is not called. >> > >> > private T createTest(final Class testClass) throws Exception >> > { >> > final BeanManager beanManager = cdiContainer.getBeanManager(); >> > >> > final CreationalContext creationalContext = >> > beanManager.createCreationalContext(null); >> > >> > final AnnotatedType annotatedType = >> beanManager.createAnnotatedType(testClass); >> > final InjectionTarget injectionTarget = >> > beanManager.createInjectionTarget(annotatedType); >> > >> > final T resu
AW: Interceptors not being called in JUnit-aware CDI environment
Hello Romain, thank you for your fast response. Yes I want to intercept the test itself. I've checked into various ways on how to actually create a bean, however nothing worked out. You mention to call beanManager.getXXX() but for my point that is not enough information. I tried to retrieve the beans of the test class via beanManager.getBeans() but regardless of what I try as annotation literals there (non, Any, etc.) nothing works, the list is always empty. What method exactly did you have in mind here? Thanks, Heiko > -Ursprüngliche Nachricht- > Von: Romain Manni-Bucau [mailto:rmannibu...@gmail.com] > Gesendet: Freitag, 7. Februar 2014 08:26 > An: dev@deltaspike.apache.org > Betreff: Re: Interceptors not being called in JUnit-aware CDI environment > > = > == > > ATTENTION! This message contains suspicious URL(s) possibly redirecting to > malicious content. Our security gateways target known problem URLs like > freeweb or URL Shorteners that are being abused by spammers. Some > examples would be groups.google.com or tinyurl.com. Please check the sender > and hyperlinks in the e-mail accurately before clicking on a link. If this > email > seems obviously bad to you please delete it. More information is available on > our website Information Security @ Daimler: http://intra.corpintra.net/intra- > is-e/spam > > = > == > > ACHTUNG! Diese E-Mail enthält verdächtige URLs welche möglicherweise auf > schädlichen Inhalt verweisen. Die Security Gateways prüfen auf bekannte > Problem-URLs wie zum Beispiel URL-Abkürzungen, die bevorzugt von > Spammern mißbraucht werden (tinyurl.com, groups.google.com, ...). Bitte > prüfen Sie den Absender und die URLs in dieser E-Mail gewissenhaft bevor sie > die verknüpften Inhalte aufrufen. Bitte löschen Sie diese E-Mail, wenn Sie der > Meinung sind, daß sich der Verdacht bestätigt. Weitere Informationen zu > unerwünschter E-Mail / SPAM finden Sie auf den Seiten der > Informationssicherheit bei Daimler unter: http://intra.corpintra.net/intra-is- > d/spam > > = > == > > > HI > > You want to intercept the test? so it means the runner needs to invoke > "business" methods of the test class which is not the case by default (ie > result > shouldn't be built from a newInstance() but from a beanManager.getXXX()). > Romain Manni-Bucau > Twitter: @rmannibucau > Blog: http://rmannibucau.wordpress.com/ > LinkedIn: http://fr.linkedin.com/in/rmannibucau > Github: https://github.com/rmannibucau > > > > 2014-02-07 : > > Hello, > > > > I've been trying to start the CDI container during Junit-Testing as > > described at the following page, > > > > http://struberg.wordpress.com/2012/03/27/unit-testing-strategies-for-c > > di-based-projects/ > > > > though I'm using Junit 4 and implemented everything using a new Runner (to > annotate tests with @RunWith). I kind of got inspired by he CDIUnit project, > but > it works only with Weld and I want to use OpenWebBeans. > > The major things like injection work perfectly, however, I realized, that > > even > though I implemented the following code to provided a CDI aware Test-Class, > an interceptor annotation on a test method is completely ignored, thus the > interceptors AroundInvoke annotated method is not called. > > > > private T createTest(final Class testClass) throws Exception > > { > > final BeanManager beanManager = cdiContainer.getBeanManager(); > > > > final CreationalContext creationalContext = > > beanManager.createCreationalContext(null); > > > > final AnnotatedType annotatedType = > beanManager.createAnnotatedType(testClass); > > final InjectionTarget injectionTarget = > > beanManager.createInjectionTarget(annotatedType); > > > > final T result = (T) > > getTestClass().getOnlyConstructor().newInstance(); > > > > injectionTarget.inject(result, creationalContext); > > > > return result; > > } > > > > Is this expected behaviour? I'm not so familiar with how interceptors > > are really implemented, but I would have guest that after providing a > > creational context and complete injection for the test class, > > interceptor annotations should work too. The interceptor itself is > > registered correctly. It is listed among all interceptors when calling > > > > WebBeansContext.currentInstance().getInterceptorsManager().getCdiInter > > cept
Re: Interceptors not being called in JUnit-aware CDI environment
HI You want to intercept the test? so it means the runner needs to invoke "business" methods of the test class which is not the case by default (ie result shouldn't be built from a newInstance() but from a beanManager.getXXX()). Romain Manni-Bucau Twitter: @rmannibucau Blog: http://rmannibucau.wordpress.com/ LinkedIn: http://fr.linkedin.com/in/rmannibucau Github: https://github.com/rmannibucau 2014-02-07 : > Hello, > > I've been trying to start the CDI container during Junit-Testing as described > at the following page, > > http://struberg.wordpress.com/2012/03/27/unit-testing-strategies-for-cdi-based-projects/ > > though I'm using Junit 4 and implemented everything using a new Runner (to > annotate tests with @RunWith). I kind of got inspired by he CDIUnit project, > but it works only with Weld and I want to use OpenWebBeans. > The major things like injection work perfectly, however, I realized, that > even though I implemented the following code to provided a CDI aware > Test-Class, an interceptor annotation on a test method is completely ignored, > thus the interceptors AroundInvoke annotated method is not called. > > private T createTest(final Class testClass) throws Exception > { > final BeanManager beanManager = cdiContainer.getBeanManager(); > > final CreationalContext creationalContext = > beanManager.createCreationalContext(null); > > final AnnotatedType annotatedType = > beanManager.createAnnotatedType(testClass); > final InjectionTarget injectionTarget = > beanManager.createInjectionTarget(annotatedType); > > final T result = (T) > getTestClass().getOnlyConstructor().newInstance(); > > injectionTarget.inject(result, creationalContext); > > return result; > } > > Is this expected behaviour? I'm not so familiar with how interceptors are > really implemented, but I would have guest that after providing a creational > context and complete injection for the test class, interceptor annotations > should work too. The interceptor itself is registered correctly. It is listed > among all interceptors when calling > > WebBeansContext.currentInstance().getInterceptorsManager().getCdiInterceptors() > > however, a test annotated with the interceptor does not trigger execution of > the AroundInvoke-method. > > Would be great, if somebody has a thought or a hint on this. > > Thanks, > > Heiko > > > If you are not the addressee, please inform us immediately that you have > received this e-mail by mistake, and delete it. We thank you for your support. >
Interceptors not being called in JUnit-aware CDI environment
Hello, I've been trying to start the CDI container during Junit-Testing as described at the following page, http://struberg.wordpress.com/2012/03/27/unit-testing-strategies-for-cdi-based-projects/ though I'm using Junit 4 and implemented everything using a new Runner (to annotate tests with @RunWith). I kind of got inspired by he CDIUnit project, but it works only with Weld and I want to use OpenWebBeans. The major things like injection work perfectly, however, I realized, that even though I implemented the following code to provided a CDI aware Test-Class, an interceptor annotation on a test method is completely ignored, thus the interceptors AroundInvoke annotated method is not called. private T createTest(final Class testClass) throws Exception { final BeanManager beanManager = cdiContainer.getBeanManager(); final CreationalContext creationalContext = beanManager.createCreationalContext(null); final AnnotatedType annotatedType = beanManager.createAnnotatedType(testClass); final InjectionTarget injectionTarget = beanManager.createInjectionTarget(annotatedType); final T result = (T) getTestClass().getOnlyConstructor().newInstance(); injectionTarget.inject(result, creationalContext); return result; } Is this expected behaviour? I'm not so familiar with how interceptors are really implemented, but I would have guest that after providing a creational context and complete injection for the test class, interceptor annotations should work too. The interceptor itself is registered correctly. It is listed among all interceptors when calling WebBeansContext.currentInstance().getInterceptorsManager().getCdiInterceptors() however, a test annotated with the interceptor does not trigger execution of the AroundInvoke-method. Would be great, if somebody has a thought or a hint on this. Thanks, Heiko If you are not the addressee, please inform us immediately that you have received this e-mail by mistake, and delete it. We thank you for your support.