文章目录

  • 概述
  • 验证DAO层的配置
    • 接口
    • SQL映射文件
    • 单元测试类
      • 基类
      • DAO层单元测试类
  • 验证Service层的配置
    • 接口以及实现类
    • 单元测试类
  • 验证Controller层的配置
    • 控制层
    • 启动服务,浏览器访问
  • 附- 模拟HTTP 请求调测利器Postman
    • Postman概述
    • Postman安装使用
    • 使用Postman
  • Github地址

概述

整合SSM框架之后,我们分别对持久层、业务层、控制层分别做下单元测试。

Area这个实体类属性相对较少,我们就选择使用Area来测试吧。

首先为tb_area表准备2条数据

-- ----------------------------
-- Records of tb_area
-- ----------------------------
INSERT INTO `tb_area` VALUES ('1', '北京', '帝都', '0', '2018-05-13 21:00:26', '2018-05-14 21:00:33');
INSERT INTO `tb_area` VALUES ('2', '上海', '魔都', '99', '2018-05-13 21:00:36', '2018-05-14 21:00:41');

验证DAO层的配置

接口

结合/o2o/src/main/resources/spring/spring-dao.xml中的配置

所以 接口层的类都应该写在com.artisan.o2o.dao包下

AreaDao.java

package com.artisan.o2o.dao;import java.util.List;import com.artisan.o2o.entity.Area;public interface AreaDao {List<Area> queryArea();
}

SQL映射文件

结合/o2o/src/main/resources/spring/spring-dao.xml中的配置

所以在/o2o/src/main/resources/mapper目录下 新建映mybatis的SQL映射文件

AreaDao.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.artisan.o2o.dao.AreaDao"><select id="queryArea" resultType="Area">SELECTarea_id,area_name,area_desc,priority,create_time,last_edit_timeFROMtb_areaORDER BYpriority DESC</select>
</mapper>

单元测试类

src/test/java目录下新建com.artisan.o2o包,使用spring-test更加方便的进行单元测试。 我们已经在 pom.xml中添加了spring-test的依赖。

创建 Spring Test 的基类,该类主要用来加载配置文件,设置web环境。所有的测试类,都需要继承该类初始化spring信息。

基类

放在com.artisan.o2o目录下,所有的测试类,都需要继承该类初始化spring信息。

package com.artisan.o2o;import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;/*** * * @ClassName: BaseTest* * @Description: 测试类的基类,配置Spring和junit整合,junit启动时加载springIOC容器* * @author: Mr.Yang* * @date: 2018年5月14日 下午12:58:21*/@RunWith(SpringJUnit4ClassRunner.class)
// 告诉junit spring配置文件
@ContextConfiguration({ "classpath:spring/spring-dao.xml", "classpath:spring-service.xml" })
public class BaseTest {}

DAO层单元测试类

com.artisan.o2o.dao包下建立DAO层的测试类,继承BaseTest

package com.artisan.o2o.dao;import static org.junit.Assert.assertEquals;import java.util.List;import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;import com.artisan.o2o.BaseTest;
import com.artisan.o2o.entity.Area;/*** * * @ClassName: AreaDaoTest* * @Description: 集成SSM后对DAO层进行验证* * @author: Mr.Yang* * @date: 2018年5月14日 下午5:21:49*/
public class AreaDaoTest extends BaseTest {@AutowiredAreaDao areaDao;@Testpublic void testQueryArea() {List<Area> areaList = areaDao.queryArea();// 插入了2条测试数据,期望list中有2条assertEquals(2, areaList.size());// SQL中按照权重排序,上海priority 99 ,期望第一条数据是 上海System.out.println(areaList.get(0));assertEquals("上海", areaList.get(0).getAreaName());}
}

单元测试运行正常。

关键日志

JDBC Connection [com.mchange.v2.c3p0.impl.NewProxyConnection@a1f72f5] will not be managed by Spring
==>  Preparing: SELECT area_id, area_name, area_desc, priority, create_time, last_edit_time FROM tb_area ORDER BY priority DESC
==> Parameters:
<==    Columns: area_id, area_name, area_desc, priority, create_time, last_edit_time
<==        Row: 2, 上海, 魔都, 99, 2018-05-13 21:00:36.0, 2018-05-14 21:00:41.0
<==        Row: 1, 北京, 帝都, 0, 2018-05-13 21:00:26.0, 2018-05-14 21:00:33.0
<==      Total: 2
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@61710c6]
Area [areaId=2, areaName=上海, areaDesc=魔都, priority=99, createTime=Sun May 13 21:00:36 BOT 2018, lastEditTime=Mon May 14 21:00:41 BOT 2018]

验证Service层的配置

接口以及实现类

接口

package com.artisan.o2o.service;import java.util.List;import com.artisan.o2o.entity.Area;public interface AreaService {/*** * * @Title: getAreaList* * @Description: 获取区域列表* * @return* * @return: List<Area>*/List<Area> getAreaList();
}

实现类

package com.artisan.o2o.service.impl;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import com.artisan.o2o.dao.AreaDao;
import com.artisan.o2o.entity.Area;
import com.artisan.o2o.service.AreaService;/*** * * @ClassName: AreaServiceImpl* * @Description: @Service标注的服务层* * @author: Mr.Yang* * @date: 2018年5月14日 下午9:06:45*/
@Service
public class AreaServiceImpl implements AreaService {@AutowiredAreaDao areaDao;@Overridepublic List<Area> getAreaList() {return areaDao.queryArea();}}

单元测试类

package com.artisan.o2o.service;import java.util.List;import org.junit.Assert;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;import com.artisan.o2o.BaseTest;
import com.artisan.o2o.entity.Area;public class AreaServiceTest extends BaseTest {@AutowiredAreaService areaService;@Testpublic void testGetAreaList() {List<Area> areaList = areaService.getAreaList();Assert.assertEquals("上海", areaList.get(0).getAreaName());}
}

BaseTest基类中,别忘了加载classpath:spring-service.xml 配置文件,否则报错。 第一步已经加好了,这里就不重复了。

单元测试运行正常。

关键日志

JDBC Connection [com.mchange.v2.c3p0.impl.NewProxyConnection@a1f72f5] will not be managed by Spring
==>  Preparing: SELECT area_id, area_name, area_desc, priority, create_time, last_edit_time FROM tb_area ORDER BY priority DESC
==> Parameters:
<==    Columns: area_id, area_name, area_desc, priority, create_time, last_edit_time
<==        Row: 2, 上海, 魔都, 99, 2018-05-13 21:00:36.0, 2018-05-14 21:00:41.0
<==        Row: 1, 北京, 帝都, 0, 2018-05-13 21:00:26.0, 2018-05-14 21:00:33.0
<==      Total: 2
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@61710c6]
Area [areaId=2, areaName=上海, areaDesc=魔都, priority=99, createTime=Sun May 13 21:00:36 BOT 2018, lastEditTime=Mon May 14 21:00:41 BOT 2018]

验证Controller层的配置

控制层

package com.artisan.o2o.web;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;import com.artisan.o2o.entity.Area;
import com.artisan.o2o.service.AreaService;@Controller
@RequestMapping("/superadmin")
public class AreaController {@AutowiredAreaService areaService;@RequestMapping(value = "/listArea", method = RequestMethod.GET)@ResponseBodypublic Map<String, Object> getAreas() {Map<String, Object> map = new HashMap<String, Object>();List<Area> areaList = new ArrayList<Area>();try {areaList = areaService.getAreaList();map.put("total", areaList.size());map.put("rows", areaList);for (Area area : areaList) {System.out.println("区域:" + area);}} catch (Exception e) {e.printStackTrace();map.put("success", false);map.put("errMsg", e.getMessage().toString());}return map;}}

启动服务,浏览器访问

访问如下地址:
http://localhost:8080/o2o/superadmin/listArea

为了美化JSON,在浏览器中,更直观的查看JSON,在Chrome中安装了json-handle插件,展示效果如下:


附- 模拟HTTP 请求调测利器Postman

Postman概述

在开发或者调试网络程序或者是网页B/S模式的程序的时候,常常需要跟踪监视网页HTTP请求,测试服务器响应是否正确。

Chrome 浏览器扩展插件:Postman,可以模拟用户 HTTP 请求的数据发送到服务器,方便测试服务器接口。

  • (1)Postman 是一个 Chrome 扩展,提供功能强大的 API & HTTP 请求调试。
  • (2)能够发送任何类型的 HTTP requests(GET, HEAD, POST, PUT…),附带任何数量的参数,以及自定义Http 头信息(HTTP Headers)。
  • (3)支持不同的认证机制(basic, digest, OAuth),接收到的响应语法高亮(HTML,JSON 或 XML)。
  • (4)能够保留了历史的请求,这样我们就可以很容易地重新发送请求,有一个“集合”功能,用于存储所有请求相同的API/域。
  • (5)项目地址:https://www.getpostman.com/

Postman安装使用

  • 首先进入Postman插件页面:
    https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop
  • 点击“添加至CHROME”按钮,即可自动下载安装。

使用Postman

浏览器中输入 chrome://apps/ , 找到并打开Postman


Github地址

代码地址: https://github.com/yangshangwei/o2o

实战SSM_O2O商铺_05集成SSM后验证DAO层、Service层、Controller层的配置相关推荐

  1. 实战SSM_O2O商铺_29【商品】商品添加之Service层的实现及重构

    文章目录 概述 DTO类 自定义异常 ProductService接口 重构 重构后的接口方法 接口实现类ProductServiceImpl 单元测试 Github地址 概述 步骤如下: 1.处理商 ...

  2. 实战SSM_O2O商铺_33【商品】商品编辑之Service层的实现

    文章目录 概述 Service接口 Service接口实现类 单元测试 Github地址 概述 在完成了 Dao层的部分之后,顺其自然的我们来到了Service层,需要调用Dao层提供的操作数据库的方 ...

  3. 实战SSM_O2O商铺_13【商铺注册】View层之初始化页面数据

    文章目录 请求过程分析 DAO层的实现 AreaDao接口,Mapper映射文件及单元测试 ShopCategoryDao接口 ShopCategoryDao.xml Mapper映射文件 单元测试 ...

  4. 实战SSM_O2O商铺_34【商品】商品编辑之Controller层的实现

    文章目录 概述 ProductController 单元测试 Github地址 概述 在完成了 实战SSM_O2O商铺_33[商品]商品编辑之Service层的实现之后,我们继续来实现Controll ...

  5. 实战SSM_O2O商铺_32【商品】商品编辑之Dao层的实现

    文章目录 概述 Dao层接口 ProductDao#selectProductById ProductDao#updateProduct ProductImgDao#deleteProductImgB ...

  6. 实战SSM_O2O商铺_07【商铺注册】DAO层-新增与更新商铺

    文章目录 概述 增加商铺 ShopDao新增insertShop接口 ShopDao.xml中新增insertShop语句 单元测试 更新商铺 ShopDao中新增updateShop接口 ShopD ...

  7. 实战SSM_O2O商铺_46【Redis缓存】头条信息+商铺目录Service层加入缓存

    文章目录 概述 HeadLineServiceImpl的改造 代码 单元测试 ShopCategoryServiceImpl的改造 代码 单元测试 Github地址 概述 根据数据的特点,不经常变动的 ...

  8. 实战SSM_O2O商铺_15【商铺注册】View层+Controller层之图片上传

    文章目录 概述 Maven依赖 文件上传解析器bean的配置 页面 shopoperation.html增加上传组件 shopoperation.js Controller层 Github地址 概述 ...

  9. 实战SSM_O2O商铺_11【商铺注册】Controller层的实现

    文章目录 概述 结构 Maven依赖 封装工具类HttPServletRequestUtil Controller控制层编写 Service层的改造 单元测试 Github地址 概述 实战SSM_O2 ...

最新文章

  1. 分析 | MEMS传感器市场报告
  2. Java学习_day001
  3. php采集一言代码_PHP简单实现一言 / 随机一句功能
  4. codeblocks折叠区的颜色
  5. SAP 电商云 Spartacus UI SSR 里 engine 和 engine instance 的区别
  6. ParameterizedType应用,利用java反射获取参数化类型的class实例
  7. android seekbar闪退,android seekbar 踩坑之路
  8. 该!4G假装5G的美国运营商被起诉了
  9. SQL 语句语法简介(一)
  10. mysql repaire_mysql之repair table 修复表札记
  11. html中怎样写渐变色代码,html颜色渐变代码 怎样用css实现网页背景颜色渐变
  12. 原生js或uni-app生成二维码(可修改二维码样式,带logo)
  13. 点在多边形内算法,JS判断一个点是否在一个复杂多边形的内部
  14. window.open()打开窗口的几种方式
  15. HighCharts生成柏拉图
  16. 京东C++开发工程师 2019校招卷总结
  17. (2021-08-09)空气质量指数计算例题练习(一)
  18. 洛谷 P2895 [USACO08FEB]Meteor Shower S C++ BFS 广搜
  19. Swin-Transformer通用视觉骨干网络主体结构代码解释
  20. 无法写入最后一个_U盘无法正常读写,还能识别还能抢救一下

热门文章

  1. cv2 画多边形不填充_OpenCV python: 任意多边形填充和凸多边形填充(fillPoly和fillConvexPoly的区别,有图有真相!)...
  2. 二分法细节学习-mid
  3. 定义一个结构体指针需要分配存储空间
  4. E: Unable to locate package libjasper-dev的解决办法(亲测可以解决)
  5. torch 的 unsqueeze用法
  6. 120. Leetcode 516. 最长回文子序列 (动态规划-子序列问题)
  7. 从C语言的角度重构数据结构系列(七)-数据结构堆知识求解数据流中的第K大元素
  8. tableau必知必会之拖拽功能失效是怎么回事
  9. 机器学习--线性回归、逻辑回归
  10. Python入门100题 | 第027题