hi stephen, mocks generated by a framework are supported with some limitations (see [1] and [2]). however, in several cases it's enough to use @Specializes and/or @Alternative (and in some cases global-alternatives [3]) for your mocks. provide those beans only in your test-classpath and you get a nice replacement for generated mocks (see e.g. [4]).
regards, gerhard [1] http://deltaspike.apache.org/documentation/test-control.html#OptionalIntegrations [2] https://github.com/os890/ee6-ds-demo/blob/master/src/test/java/org/os890/demo/ee6/test/MockedPageBeanTest.java [3] https://deltaspike.apache.org/documentation/spi.html#GlobalAlternative [4] https://github.com/CDIatWork/IdeaFork/tree/master/ideafork_core/src/test/java/at/irian/cdiatwork/ideafork/test/core 2017-03-15 21:30 GMT+01:00 Stephen More <[email protected]>: > I think I start to run into issues when I try to utilize ContextMocker from > http://illegalargumentexception.blogspot.com/2011/12/jsf- > mocking-facescontext-for-unit-tests.html > > I have a feeling that ContextMocker is not compatible with > CdiTestRunner..... > > On Wed, Mar 15, 2017 at 9:54 AM, Stephen More <[email protected]> > wrote: > > > I have evolved my use case, and I am looking for any more pointers in > > getting the test working.... > > > > My named bean now sets a FacesMessage when over a limit ( > > https://github.com/mores/maven-examples/blob/master/ > > prime-deltaspike/src/main/java/org/test/Product.java#L28 ) > > > > Servlet dumps any faces messages that exist ( https://github.com/mores/ > > maven-examples/blob/master/prime-deltaspike/src/main/ > > java/org/test/MyServlet.java#L53 ) > > > > Everything works as expected when deployed. What is needed to make the > > unittest work ? > > > > Do I need to mock FacesContextFactory or should that be handled by > > CdiTestRunner ? > > Are there any examples how this would be handled ? Is this where I need > to > > utilize the BeanProvider that was mentioned earlier ? > > > > -Thanks for listening. > > > > On Tue, Feb 28, 2017 at 8:55 AM, John D. Ament <[email protected]> > > wrote: > > > >> Stephen, > >> > >> I suspect the failure is because of the use of mockito. We provide some > >> mocking support OOTB, would that help? > >> > >> http://deltaspike.apache.org/documentation/test-control.html > >> #MockFrameworks > >> > >> John > >> > >> On Tue, Feb 28, 2017 at 7:38 AM Stephen More <[email protected]> > >> wrote: > >> > >> > The current - non working test code can be found here: > >> > https://github.com/mores/maven-examples/tree/master/prime-deltaspike > >> > > >> > Servlet works as expected when deployed - output is survey says: 3.96 > ( > >> > > >> > https://github.com/mores/maven-examples/blob/master/prime- > >> deltaspike/src/main/java/org/test/MyServlet.java > >> > ) > >> > > >> > But when trying to run the test, windowContext appears to be null. ( > >> > > >> > https://github.com/mores/maven-examples/blob/master/prime- > >> deltaspike/src/test/java/org/test/MyServletTest.java > >> > ) > >> > > >> > Any and all help is always appreciated. > >> > > >> > On Mon, Feb 27, 2017 at 9:55 PM, Stephen More <[email protected] > > > >> > wrote: > >> > > >> > > I have been using > >> > org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner > >> > > to test JSF backing beans and everything seems to be working well. > >> > > > >> > > > >> > > At this point I am struggling how to test a plain old servlet that > >> uses > >> > > injection, are there any examples anywhere ? > >> > > > >> > > Here is what I currently have: > >> > > > >> > > @RunWith( CdiTestRunner.class ) > >> > > @TestControl( projectStage = org.apache.deltaspike.core. > >> > > api.projectstage.ProjectStage.UnitTest.class ) > >> > > public class MyServletTest > >> > > { > >> > > private static org.slf4j.Logger log = > >> > org.slf4j.LoggerFactory.getLogger( > >> > > MyServletTest.class ); > >> > > > >> > > @Inject > >> > > private org.apache.deltaspike.core.spi > >> .scope.window.WindowContext > >> > > windowContext; > >> > > > >> > > @Inject > >> > > private org.apache.deltaspike.cdise.api.ContextControl > >> > > contextControl; > >> > > > >> > > @InjectMocks > >> > > private MyServlet myServlet; > >> > > > >> > > @After > >> > > public void teardown() > >> > > { > >> > > contextControl.stopContext( > >> > javax.enterprise.context.ConversationScoped.class > >> > > ); > >> > > } > >> > > > >> > > @Before > >> > > public void init() > >> > > { > >> > > org.mockito.MockitoAnnotations.initMocks( this ); > >> > > > >> > > contextControl.startContext( > >> > javax.enterprise.context.ConversationScoped.class > >> > > ); > >> > > windowContext.activateWindow( "testWindow" ); > >> > > } > >> > > > >> > > @Test > >> > > public void testFinancialEstimateReport() throws Exception > >> > > { > >> > > javax.servlet.http.HttpServletRequest request = > >> > > org.mockito.Mockito.mock( javax.servlet.http. > HttpServletRequest.class > >> ); > >> > > javax.servlet.http.HttpServletResponse response = > >> > > org.mockito.Mockito.mock( javax.servlet.http. > HttpServletResponse.class > >> ); > >> > > > >> > > org.mockito.Mockito.when( request.getServletPath() > >> > > ).thenReturn( "/this/path" ); > >> > > org.mockito.Mockito.when( request.getParameter( > "ID" ) > >> > > ).thenReturn( "1234" ); > >> > > org.mockito.Mockito.when( request.getParameter( > >> "format" > >> > ) > >> > > ).thenReturn( "PDF" ); > >> > > > >> > > myServlet.doGet( request, response ); > >> > > } > >> > > } > >> > > > >> > > But the @Inject is not happening inside of MyServlet...what is > needed > >> to > >> > > make this work ? > >> > > > >> > > -Thanks > >> > > > >> > > > >> > > > >> > > >> > > > > >
