>Java >java지도 시간 >새로운 Java 운동: 테스트 주도 개발 3---사용자 등록

새로운 Java 운동: 테스트 주도 개발 3---사용자 등록

黄舟
黄舟원래의
2016-12-30 13:11:241248검색

사용자 등록 과정은 사용자가 사용자 이름과 비밀번호를 입력한 후 사용자의 기본 정보와 계정 정보를 데이터베이스에 올바르게 설정하는 것입니다.

첫 번째 단계는 테스트 케이스를 작성하고 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)를 참고해주세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.