一个电商项目的Web服务化改造6:单元测试4步走,构造数据、执行操作、断言、回滚
单元测试,在很早之前的文章已经介绍过。
可以在这里看到相关的几篇文章:http://blog.csdn.net/FansUnion/article/category/1333595/2
在这次Web服务化改造中,理论上有4层需要测试。
1. Mybatis的mapper层,mapper.java和,mapper.xml,
2. 负责数据组装的Dao层,Dao.java。
3.负责业务逻辑的Service层,Service.java。
4.经过Dubbo包装之后的WebService层,WebService.java。
考虑到实际情况,mapper层没有写相关的单元测试,只写了另外3层的。
同时需要注意到的是,Service层和WebService层,内部代码可以说是完全一样,唯一不同的是,Service调用的是本地代码,而WebService调用的是远程的代码。
Dao层的单元测试:初始化数据,然后就是“单元测试标准4步”,构造数据-执行操作-断言-回滚。
初始化:Spring和JUnit结合提供了注解支持,配置dataSource.xml就可以了。
构造数据:手动构造brand对象
执行操作:我们自己写的add、get等方法
断言:增加add之后,数据库中的数据和我们插入的数据,是否完全一样
回滚:执行操作之后,数据库回滚。也就是说,单元测试,不会“污染”数据库。
Service层的单元测试
Service层和Dao层流程基本一致,初始化+标准4步。
不同点:service初始化,需要配置spring上下文,上下文文件中,再引入dataSource.xml。
spring-context-nodubbo.xml
Dubbo的WebService的单元测试
总体流程,和Service一模一样。
需要注意的地方:
1.引入的context不一样,里面有dubbo配置。
这个地方的单元测试,注入的bean,是dubbo包装的。
而service层,是本地的bean。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd
"> <dubbo:application name="ws-demo" /> <dubbo:registry address="N/A" /> <dubbo:reference id="brandService" interface="cn.fansunion.webservice.service.front.BrandService" version="1.0.0"
url="webservice://127.0.0.1:9000/cn.fansunion.webservice.service.front.BrandService"/> <dubbo:reference id="redmanService" interface="cn.fansunion.webservice.service.front.RedmanService" version="1.0.0"
url="webservice://127.0.0.1:9000/cn.fansunion.webservice.service.front.RedmanService"/>
</beans>
2.调用dubbo服务时,“事务”不再自己本地的控制范围内,因此,执行操作之后,数据无法回滚。
单元测试结束,数据库中多了“脏数据” ,需要手动清除。
因此,我觉得dubbo服务方,应该使用单元测试专门配置的库。
//设置自动回滚
3.有相关人士认为,dubbo的WebService没有提供服务,因为service经过测试了,dubbo就是简单的包装了下,只有1个是对的,其它的就没啥问题。
我本人认为这纯粹是“过于自信” 、“侥幸”的心理,单元测试本身的目的之一,就是让程序自动化地发现问题,至少要在预期之内。
当程序有所改动,重新执行一遍测试,就可能发现新的问题。
或者说,这是个概率问题。service层是对的,dubbo包装的WebService很可能不会有问题,但我认为它不可能做到“100%” 。
建言:多写点单元测试,真是提高开发质量的好方法。怎么测试自己写的代码,保障代码质量,有规律可循。
个人观察:人类世界,就没有几件事是一定会发生的。一定发生的事,通常带有附加条件。
一个电商项目的Web服务化改造6:单元测试4步走,构造数据、执行操作、断言、回滚的更多相关文章
- 一个电商项目的Web服务化改造
一个电商项目的Web服务化改造 项目,早期是随便瞎做的,没啥架构,连基本的设计也没. 有需求,实现需求,再反复修改. 大致就是这么做的. 最近,项目要重新架构,和某boss协商的结果是,采用阿里开源的 ...
- 一个电商项目的Web服务化改造3:改进方案の规范和约定、单表、单一职责
最近一直在做一个电商项目,需要把原有单系统架构的项目,改造成基于服务的架构,SOA. 有点挑战,做完了,会有很大进步. 上一篇,我们描述了原有项目中的问题. 或者说是,本篇的基本 ...
- 一个电商项目的Web服务化改造5:面向服务的分层架构设计(有图有真相)
最近一直在做一个电商项目,需要把原有单系统架构的项目,改造成基于服务的架构,SOA. 有点挑战,做完了,会有很大进步. 本篇,以我亲自画的3个图,阐述一下架构设计. 一.分层架构-总体图 ...
- 一个电商项目的Web服务化改造4:方案和架构,通用接口的定义和实现
最近一直在做一个电商项目,需要把原有单系统架构的项目,改造成基于服务的架构,SOA. 有点挑战,做完了,会有很大进步. 上一篇,我们明确了我们的"规范和约定". 从 ...
- 一个电商项目的Web服务化改造2:现有项目的5个问题
最近一直在做一个电商项目,需要把原有单系统架构的项目,改造成基于服务的架构,SOA. 有点挑战,做完了,会有很大进步, 1.现有项目的问题 1.1代码风格不统一 不同的 ...
- 一个电商项目的Web服务化改造7:Dubbo服务的调用,4个项目
使用dubbo服务的过程,很简单,和之前学习的WebService完全一样,和本地接口调用也基本一致. dubbo和WebService的区别:我认为dubbo就是封装了WebService,然后提供 ...
- 如何一步一步用DDD设计一个电商网站(六)—— 给购物车加点料,集成售价上下文
阅读目录 前言 如何在一个项目中实现多个上下文的业务 售价上下文与购买上下文的集成 结语 一.前言 前几篇已经实现了一个最简单的购买过程,这次开始往这个过程中增加一些东西.比如促销.会员价等,在我们的 ...
- 如何一步一步用DDD设计一个电商网站(十)—— 一个完整的购物车
阅读目录 前言 回顾 梳理 实现 结语 一.前言 之前的文章中已经涉及到了购买商品加入购物车,购物车内购物项的金额计算等功能.本篇准备把剩下的购物车的基本概念一次处理完. 二.回顾 在动手之前我对之 ...
- 如何一步一步用DDD设计一个电商网站(七)—— 实现售价上下文
阅读目录 前言 明确业务细节 建模 实现 结语 一.前言 上一篇我们已经确立的购买上下文和销售上下文的交互方式,传送门在此:http://www.cnblogs.com/Zachary-Fan/p/D ...
随机推荐
- linux 条件测试 ******
文件状态测试 -b filename 当filename 存在并且是块文件时返回真(返回0) -c filename 当filename 存在并且是字符文件时返回真 -d pathname 当path ...
- bzoj4889
http://www.lydsy.com/JudgeOnline/problem.php?id=4889 人傻常数大 bzoj上跑不过 洛谷上能过两到三个点 我写的是树套树啊 怎么跑的比分块还慢 每次 ...
- 【高德地图API】VS2012或者VS2013添加高德地图v2.1.1版本SDK失败
可能由于v2.1.1版本SDK可能是在Win8.1环境下编译[这里有许多的原因,系统升级,安装VS2013等等] 有童鞋在操作正常的情况下添加SDK失败,提示版本不兼容. 如下图: 编辑项目 *.c ...
- ubuntu16.04更改源
最近用apt-get安装软件总是提示列表无法全部更新,导致一些软件安装不上,下面我们通过讲/etc/apt/sources.list里为阿里源,实现访问. 第一步: 备份/etc/apt/source ...
- 自动调整速率的Actor设计模式
问题背景 与数据库或者存储系统交互是所有应用软件都必不可少的功能之一,akka开发的系统也不例外.但akka特殊的地方在于,会尽可能的将所有的功能都设计成异步的,以避免Actor阻塞,然而无法避免IO ...
- blockhouses
题意 : 给你一张图上面" X " 代表墙 , " . " 代表空地 , 让你在空地上放置炮台 , 条件是 不能 让彼此的炮台 可以互相看见 ( 隔着墙就看不见 ...
- 15年用canvas画的
请恕我当年的工作太轻松,用canvas手打了一个图,技术含量并没有什么,现在看看,甚是怀念_(¦3」∠)_ <!DOCTYPE html> <html> <head&g ...
- InputStream和Reader
java.io下面有两个抽象类:InputStream和ReaderInputStream是表示字节输入流的所有类的超类Reader是用于读取字符流的抽象类InputStream提供的是字节流的读取, ...
- 移动web——touch事件介绍
基本概念 1.在移动web端点击事件或者滑动屏幕.捏合等动作都是由touchstar.touchmove.touchend这三个事件组合在一起使用的 2.click事件在移动端会有0.2秒的延迟,下面 ...
- [Windows Server 2012] IIS自带FTP配置方法
★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频.★ 本节我们将带领大家:IIS自带FT ...