You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@deltaspike.apache.org by "John D. Ament (JIRA)" <ji...@apache.org> on 2017/03/02 02:05:45 UTC
[jira] [Commented] (DELTASPIKE-1236) unit testing a servlet that
uses injection
[ https://issues.apache.org/jira/browse/DELTASPIKE-1236?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15891479#comment-15891479 ]
John D. Ament commented on DELTASPIKE-1236:
-------------------------------------------
[~mores] not sure if you saw my messages on the mailing list, so anyways I'll post a complete response. The problem is that you're mixing mockito and deltaspike. When I change your test class to be:
{code:java}
@RunWith(CdiTestRunner.class)
public class MyServletTest {
@Inject
private org.apache.deltaspike.core.spi.scope.window.WindowContext windowContext;
@Inject
private org.apache.deltaspike.cdise.api.ContextControl contextControl;
@Inject
private MyServlet myServlet;
@After
public void teardown() {
contextControl
.stopContext(javax.enterprise.context.ConversationScoped.class);
}
@Before
public void init() {
contextControl
.startContext(javax.enterprise.context.ConversationScoped.class);
windowContext.activateWindow("testWindow");
}
@Test
public void testServlet() 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);
}
}
{code}
It passes fine. But note, you can't mix the two. If you need to do mocking, you would use our MockManager so that its still handled as a CDI injection point - http://deltaspike.apache.org/documentation/test-control.html#MockFrameworks
Using the mocks for request/response should be perfectly fine for your use case, but you can't expect @Inject and mockito to work together.
> unit testing a servlet that uses injection
> ------------------------------------------
>
> Key: DELTASPIKE-1236
> URL: https://issues.apache.org/jira/browse/DELTASPIKE-1236
> Project: DeltaSpike
> Issue Type: Improvement
> Affects Versions: 1.7.2
> Environment: Tomcat
> Reporter: Stephen More
>
> 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 ?
> 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 )
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)