测试方法,不通过页面(新手期疑惑)
问题:
刚入职,带我的老员工让我搭建SSM框架并实现对数据库的CRUD操作。搭框架简单,测试难住了我(不想通过前台页面操作)。
当时的疑惑主要是:
1)怎么调用我后台控制层中相应的方法?使其启动。
2)添加操作时,将数据写到哪儿?
解决方法:
拿“增”举例:
框架搭建OK后,直接将需要增的东西在controller层中的增方法中一个个set到自己写的实体中,将contoller层中相应方法的参数括号中什么都不写(为了浏览器URL请求时直接请求方法,不需要传值),set好实体后,在下面调用相应的service层方法,将实体传到service的参数中。ok!启动tomcat,在浏览器访问该控制层方法所对应的@RequestMapping("doSaveObject")注解所定义的URL路径。方法执行,数据入库,控制台打印。完美!
@RequestMapping("/jtt/") @Controller public class JttController { @Autowired private JttService jttService; @RequestMapping("doSaveObject") @ResponseBody public JsonResult doSaveObject(){ //json字符串数组 String str="[{\"id\":\"828\",\"title\":\"容易,.......\",\"doc_content\":\"文章内容\",\"write_time\":\"2018-01-08\",\"author\":\"作者\"}," + "{\"id\":\"829\",\"title\":\"哈哈哈哈哈哈哈哈哈啊哈标题\",\"doc_content\":\"文章内容\",\"write_time\":\"2018-01-08\",\"author\":\"作者\"}]"; //转化为数组 Jtt[] ss=(Jtt[])JSONArray.toArray(JSONArray.fromObject(str),Jtt.class); //遍历数组,并在每次遍历中给jtt实体赋值 for(int i=0;i<ss.length;i++){ Jtt jtt = new Jtt(); jtt.setId(ss[i].getId()); jtt.setTitle(ss[i].getTitle());; System.out.println(jtt); jttService.saveObject(jtt); jtt=null; } return new JsonResult("save ok"); }
注:
1)new后,用完之后要指向null;
2)里面的JsonResult是自定义的一个封装结果的类。本权限管理项目中是分页查询,需要查询分页信息,这个封装类中的属性有分页信息的和实体的。
3)修改和增一样(直接将新数据set进实体,不同的是sql语句的处理)。查询看情况(查询全部就不需要控制层中相应方法带参数。依条件查询就需要有参数)
4)通过id删除的话,控制层方法中就需要有参数了。需要在浏览器访问的URL中加上参数,如,http://localhost:8080/CGB-JT-SYS-V1.01/jtt/t2.do?id=2(多个参数之间通过&连接)
5)访问URL的确定:ip:端口号/项目名/@RequestMapping注解所定义的路径.do(.do是前端控制器定义的)
6)更好的测试方法——Junit。