Le contrôleur utilise request.getParameter à l'avant, le code comme ci-dessousComment puis-je utiliser Mockito pour tester uniquement l'avant?
public class ComputingController extends HttpServlet {
public ComputingController() {
super();
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String reDirect = request.getParameter("redirect");
RequestDispatcher rd = null;
if ("update".equals(reDirect)) {
UpdateData updateData = new UpdateData();
String updateResult = updateData.doUpdateData();
request.setAttribute("updateResult", updateResult);
rd = request.getRequestDispatcher("WEB-INF/jsp/computing/success.jsp");
rd.forward(request, response);
}
else {
rd = request.getRequestDispatcher("WEB-INF/jsp/computing/error.jsp");
rd.forward(request, response);
}
}
}
J'utilise Junit et Mockito pour tester en avant.
Mais quand j'exécuterai le test (comme ci-dessous), il exécutera updateData.doUpdateData() dans le contrôleur.
Comment puis-je utiliser le Mockito pour qu'il n'exécute pas updateData.doUpdateData() mais forward?
public class ComputingControllerTest {
@Mock
HttpServletRequest request;
@Mock
HttpServletResponse response;
@Mock
RequestDispatcher rd;
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
}
public void doGet_testForward() throws Exception {
String reDirect = "update";
when(request.getParameter("redirect")).thenReturn(reDirect);
when(request.getRequestDispatcher("WEB-INF/jsp/computing/success.jsp")).thenReturn(rd);
new ComputingController().doGet(request, response);
verify(rd).forward(request, response);
}
}
En l'état, vous ne pouvez pas. Pour être en mesure de le faire, vous devez fournir une mise à jour UpdateData à la servlet, et la servlet devrait utiliser cette fausse UpdateData, au lieu de créer sa propre nouvelle à chaque fois. C'est essentiellement le principe de l'injection de dépendance. –