新Java运动:测试驱动开发3---用户注册
来源:互联网 发布:全球程序员节在哪儿 编辑:程序博客网 时间:2024/04/30 02:16
http://blog.csdn.net/yt7589/article/details/8646706
经过上节的努力,我们终于可以进入正式功能开发了。
用户注册流程是用户输入用户名和密码,然后正确将用户基本信息和账户信息建立到数据库中去。
让我们先从简单的步聚做起,第一步是写一个测试用例,传入cmd=registerUser,userName=闫涛,然后调用Servlet,最后在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方便,尤其是返回页面内容较多时。所以我们需要改造上述测试用例,使其可以自动化测试。从前面的文章中可以知道,我们会将页面中需要显示的内容,存储在request对象中,通常是以Map<String, Object>形式存储,页面只是从这里面获取值,然后打印到页面上,因此我们可以通过验证存储在Map<String, Object>中的内容来自动判断我们的功能开发是否正确。
好了,下面我们先来实现这个特性。在MainServlet.registerUser中,定义Map<String, Object> model并将其加入到request中,代码如下所示:
- 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;
- }
这时我们会发现,运行测试用例竟然不能通过!这是正常的,因为我们的HttpJunitRequest对象中没有实现getAttribute和setAttribute方法,为了使测试用例可以通过,我们需向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的理念进行开发了。
由上面的例子可以看出,我们每次都先想好对一个小功能的测试用例,然后编码试图通过这个测试用例,在通过之后,再继续往上添加新的功能。而每次测试、开发、验证仅需要最多二、三十分钟时间。通过这种方式编写的代码,基本上均经过了充分的测试,代码质量是可以得到一定程度的保障的。
- 新Java运动:测试驱动开发3---用户注册3
- 新Java运动:测试驱动开发3---用户注册3
- 新Java运动:测试驱动开发3---用户注册
- 新Java运动:测试驱动开发3---用户注册2
- 新Java运动:测试驱动开发3---用户注册4
- 新Java运动:测试驱动开发3---用户注册
- 新Java运动:测试驱动开发3---用户注册2
- 新Java运动:测试驱动开发2---最小初始可运行系统
- 新Java运动:设计驱动开发实践1需求分析
- Java测试驱动开发
- 测试jdbc注册驱动
- 多线程测试用户注册
- 用户注册测试分析
- 移动云计算中开发和测试用户注册服务器
- 新注册了一个用户
- java数据库开发中两种注册oracle驱动的方式
- java---用户注册
- 新Java运动Nava:师PHP技术以开发Web应用
- 121 js中(function(){…})()立即执行函数写法理解
- TimeCacheMap的解析与使用
- linux-文件系统管理09-盘符漂移问题
- hdu-- 计算机学院大学生程序设计竞赛(2015’11)
- Ubuntu 14.04 Web服务器Tomcat安装测试
- 新Java运动:测试驱动开发3---用户注册
- javascript权威指南学习笔记(三)
- 杭电2015‘11校赛 1004 质方数
- 图像处理中的卷积---3.高斯卷积计算梯度
- OpenCV 中的GMM模型 高斯混合模型
- lua播放帧动画
- 在线支付功能
- sql%rowcount
- hdu-- 计算机学院大学生程序设计竞赛(2015’11)