Я использую Junit и Mockito для проверки вперед. Вот часть PortalServletTest
класса:Mockito TooManyActualInvocations
@SuppressWarnings("serial")
@BeforeClass
public static void setUpTests() {
when(request.getRequestDispatcher(Mockito.anyString())).thenReturn(rd);
when(request.getSession()).thenReturn(httpSession);
when(httpSession.getServletContext()).thenReturn(servletContext);
when(servletContext.getAttribute(Constants.CONFIGURATION_MANAGER_ATTR)).thenReturn(configurationManager);
when(configurationManager.getConfiguration()).thenReturn(configuration);
List<List<String>> mandatoryHeaders = new ArrayList<List<String>>();
mandatoryHeaders.add(new ArrayList<String>() {
{
add("HTTP_XXXX");
add("http-xxxx");
}
});
List<List<String>> optionalHeaders = new ArrayList<List<String>>();
optionalHeaders.add(new ArrayList<String>() {
{
add("HTTP_YYYY");
add("http-yyyy");
}
});
when(configuration.getIdentificationHeaderFields()).thenReturn(mandatoryHeaders);
when(configuration.getOptionalHeaderFields()).thenReturn(optionalHeaders);
}
@Test
public void testMissingHeadersRequest() throws IOException {
when(request.getHeader(Mockito.anyString())).thenReturn(null);
target().path("/portal").request().get();
Mockito.verify(response, times(1)).sendError(HttpServletResponse.SC_USE_PROXY, PortalServlet.MISSING_HEADERS_MSG);
}
@Test
public void testSuccesfulRequest() throws IOException, ServletException {
Mockito.doAnswer(new Answer<Object>() {
public Object answer(InvocationOnMock invocation) {
Object[] args = invocation.getArguments();
String headerName = (String) args[0];
return headerName;
}
}).when(request).getHeader(Mockito.anyString());
target().path("/portal").request().get();
verify(rd).forward(Mockito.any(ServletRequest.class), Mockito.any(ServletResponse.class));
}
PortalServlet
код:
RequestDispatcher rd = request.getRequestDispatcher("index.html");
rd.forward(mutableRequest, response);
Проблема заключается в том, что при тестировании класса, я получаю сообщение об ошибке:
RequestDispatcher .вперед(,); Требуется 1 раз: -> в xxx.PortalServletTest.testSuccesfulRequest (PortalServletTest.java:140)
Но был в 2 раза. Нежелательные призывание: -> в xxx.PortalServlet.addRequestHeaders (PortalServlet.java:144)
на xxx.PortalServletTest.testSuccesfulRequest (PortalServletTest.java:140)
Если я бегу каждого теста по отдельности они проходят ОК. Похоже, что форвард от PortalServlet
засчитывается дважды для каждого теста. Любое предложение, как решить эту проблему?
Заранее спасибо.
Показать полный код PortalServletTest. Я предполагаю, что вы инициализируете mock instance PortalServlet только один раз для всех тестов. –