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)