사용자 등록 과정은 사용자가 사용자 이름과 비밀번호를 입력한 후 사용자의 기본 정보와 계정 정보를 데이터베이스에 올바르게 설정하는 것입니다.
첫 번째 단계는 테스트 케이스를 작성하고 cmd=registerUser, userName=Yan Tao를 전달한 다음 서블릿을 호출하고 마지막으로 d:/ablog/app에서 시작합니다. 수신된 사용자 이름은 html 파일에 다시 기록됩니다. 첫 번째 이름은 테스트 코드입니다.
@Test public void testRegisterUser001() { HttpServletRequest request = new HttpJunitRequest(); Map<String, String[]>params = (Map<String, String[]>)request.getParameterMap(); String[] cmd = new String [1]; cmd[0] = "registerUser"; params.put("cmd", cmd); String[] userName = new String[1]; userName[0] = "y闫涛t"; params.put("userName", userName); MainServlet m = new MainServlet(); HttpServletResponse response = new HttpJunitResponse(); try { m.doGet(request, response); response.getWriter().close(); } catch (IOException | ServletException e) { // TODO Auto-generated catch block e.printStackTrace(); } assertTrue(1>0); }
다음은 이 테스트 케이스를 통과하는 코드입니다. 먼저 MainServlet이 명령 매개변수에 따라 점프할 때 다음 코드를 추가합니다.
switch (cmd) { case "registerUser": registerUser(request, response); break;
특정 처리 기능은 다음과 같습니다.
private void registerUser(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { PrintWriter out = response.getWriter(); String userName = null; if (request.getParameter("userName") != null) { userName = request.getParameter("userName"); } out.print("userName=" + userName + "!"); }
테스트 케이스를 실행한 후 d:/ablog/app.html을 열면 사용자 이름이 인쇄되어 있는 것을 확인할 수 있습니다. 파일.
하지만 잠깐만요, 위의 테스트 단계는 자동화되지 않았을 뿐만 아니라, 특히 반환된 페이지에 많은 콘텐츠가 포함된 경우 브라우저를 직접 열어 URL에 액세스하는 것보다 더 편리합니다. 따라서 위의 테스트 사례를 자동으로 테스트할 수 있도록 변환해야 합니다. 이전 기사에서 알 수 있듯이 페이지에 표시해야 하는 콘텐츠를 요청 개체에 저장합니다. 일반적으로 페이지는 해당 콘텐츠에서 값을 가져옵니다. 따라서 Map
자, 먼저 이 기능을 구현해 보겠습니다. MainServlet.registerUser에서 Map994a833a6ffa28d85b72cb15422c29d6 모델을 정의하고 이를 요청에 추가합니다. 코드는 다음과 같습니다.
Map<String, Object> model = new HashMap<String, Object>(); long userId = 101; model.put("userId", "" + userId); request.setAttribute("model", model);
테스트 사례에서는 userId 값이 올바르게 설정되었는지 테스트합니다. 코드는 아래와 같습니다:
Map<String, Object> model = (Map<String, Object>)request.getAttribute("model"); if (model.get("userId") != null && Long.parseLong("" + model.get("userId"))==101) { rst = true; }
이때 테스트 케이스 실행이 실패했음을 알 수 있습니다! getAttribute 및 setAttribute 메소드가 HttpJunitRequest 객체에 구현되지 않았기 때문에 이는 정상적인 현상입니다. 테스트 사례를 통과하려면 HttpJunitRequest에 다음 코드를 추가해야 합니다.
private final Map<String, Object> attributes = new HashMap<String, Object>(); @Override public Object getAttribute(String key) { return attributes.get(key); } @Override public void setAttribute(String key, Object value) { attributes.put(key, value); }
테스트 사례를 다시 실행하세요. 이때 마침내 우리를 행복하게 해주는 녹색 패스 사인이 표시될 수 있습니다.
지금까지는 기본적으로 최소한의 실행 가능한 시스템을 구축했고, TDD 개념에 따라 개발할 수 있습니다.
위의 예에서 볼 수 있듯이, 우리는 매번 작은 함수에 대한 테스트 케이스를 먼저 생각한 다음, 테스트 케이스를 통과하려고 코드를 작성하고, 이를 통과한 후 계속해서 새로운 함수를 추가합니다. . 각 테스트, 개발, 검증에는 최대 20~30분밖에 걸리지 않습니다. 이렇게 작성된 코드는 기본적으로 완전한 테스트를 거쳤으며 코드 품질은 어느 정도 보장될 수 있습니다.
위는 New Java Movement: Test Driven Development 3---사용자 등록 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!