spring+xml集成测试(准备数据和验证项的外部文件化)
Spring的集成测试
单位测试和集成测试,我想大家都做过,一般情况下,一般逻辑且不需要操作数据库的情况比较适合于单位测试了。而对于一个数据库应用来说,集成测试可能比单元测试更重要,你可以想象,一个互联网应用,不是增修数据,就是查询数据了,那么验证操作在数据记录上的影响就更为需要。如果在的应用中使用了spring,那么就可以利用spring集成测试框架了,其实它所做的工作就是加载配置文件并配置其中相关的信息,其中也包括数据源等,其次在验证完成之后,回滚对数据表的操纵,当然你也可以手动的设置为不回滚,总之,spring的测试框架大大简化集成测试所要做的工作。
我的问题
spring解决了我们集成测试当中的大部分问题,但是在有些情况下,还是非常的麻烦,主要在两个方面无法减少测试的工作量,一是准备测试数据(先于测试插入数据表中的数据),可能针对于一个功能的一种场景的测试,准备的测试数据可能就涉及到十几,几十张表,数据记录就达到几十,几百条。其二,需要验证的数据项非常多(验证操作在数据记录上的影响),你可能需要验证十几张,几十张表中的若干个字段的数据正确性,所以,在这种情况下,一个功能一个分支的测试就可能涉及到上百行代码,可以想象,要是这个功能多几个分支,测试代码迅速膨胀,而且这样的代码还需要维护(要知道测试的代码也是需要维护了,极有可能因为表结构或者程序逻辑发生的变化而需要变更测试代码) ,那么遇到这样的情况,有什么办法呢?
我的解决方法
针对上面的测试窘境,主要是要解决两个方面的问题,第一,准备测试数据;第二,验证数据项。其实这样两个问题归为一个问题就准备数据和验证项太多了,导致测试代码膨胀,解决这个问题的办法就是把准备测试数据和验证项都放到外部文件中去,比如xml文件了,请看下面的xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<suite>
<case enable="true">
<desc>测试用例描叙</desc>
<init>
<insert>初始化SQL</insert>
<insert>初始化SQL</insert>
</init>
<assert>
<select>查询SQL</select>
<props>
<prop key="查询SQL的选择列">期望值</prop>
<prop key="查询SQL的选择列">期望值</prop>
</props>
</assert>
</case>
</suite>
我们把测试的初始化脚本,断言的SQL以及期望值都放在xml文件中,其中case代表功能的一个逻辑分支。如果这些东西都放在外部文件的时候,那么测试就只剩下了三步:第一步,读取xml文件;第二步,调用需要测试功能;第三步,调用断言方法,这就是需要我们的测试代码了,其中第一步和第三步都是所有测试方法所共有,这样是不是大大简化的代码量呢,另外由于初始化脚本,断言SQL,期望值都放在外部文件中,就更便于测试代码的维护了。
你认为我的方法如何呢?你有没有更好的方法,欢迎各位给出你的意见。
spring+xml集成测试(准备数据和验证项的外部文件化)的更多相关文章
- 3.spring:自动装配/Bean之间的关系/作用域/外部文件/spel/
1.自动装配/手动装配 xml配置文件里的bean自动装配 Spring IOC 容器里可以自动的装配Bean,需要做的仅仅是在<bean>的autowire属性里面指定自动装配模式 -& ...
- spring 4.0 注解数据验证2
在spring 4.0 注解数据验证1中有基本的数据验证方法.还是那个POJO: package com.suyin.pojo; import java.lang.reflect.Field; imp ...
- Spring绑定表单数据
Spring提供了一些jsp页面常用的form标签,很大程度上提高了我们开发的速度,不用再一个个的标签去绑定属性,而且后台接收数据也很简单,可以直接接收object对象作为属性.官方form标签介绍的 ...
- 在Spring Boot中使用数据缓存
春节就要到了,在回家之前要赶快把今年欠下的技术债还清.so,今天继续.Spring Boot前面已经预热了n篇博客了,今天我们来继续看如何在Spring Boot中解决数据缓存问题.本篇博客是以初识在 ...
- myeclipse中配置spring xml自己主动提示
版权声明: https://blog.csdn.net/zdp072/article/details/24582173 这是一篇分享技巧的文章:myeclipse中配置spring xml自己主动提示 ...
- spring xml的配置
Spring xml文档头得配置 spring文档头一般是可以复制过来得,刚学习得时候一直看网上有没有配置,然后也没有找到,希望以下过程得学习可以给大家带来帮助!! 1 ...
- Spring Boot返回json数据及完美使用FastJson解析Json数据
Spring Boot返回json数据 视频地址:http://www.iqiyi.com/w_19rubxzsr5.html 博文参考:https://blog.csdn.net/linxingl ...
- spring xml properties split with comma for list
在注入spring bean 属性值的时候常常会用到list, 一般使用方式例如以下: <bean id="testBean" class="com.mytest. ...
- Spring.NET的中间数据层(Middle Tier Data Access)——事务管理(Transaction management)
简介 Spring.NET为事务管理提供了一个持久化抽象(consistent abstraction ),其优点如下: 为不同事务API,例如ADO.NET,Enterprise Services, ...
随机推荐
- python_26_dictionary
#key-value 字典无下标 所以乱序,key值尽量不要取中文 info={ 'stu1101':'Liu Guannan', 'stu1102':'Wang Ruipu', 'stu1103': ...
- MySQL的入门与使用,sqlyog对数据库,表和数据的管理
MySQL的入门 1.到mysql官网下载. 2.安装mysql软件(一定要放到英文路径下) 3.使用 验证是否成功 将mySQL的bin路径添加到系统环境变量Path中 打开dos命令窗口 Wind ...
- java: 非法字符: \65279
IDEA导入项目后,编译的时候出现Error:(1, 1) java: 非法字符: \65279: 修改:找到编译报错的文件,用Notepad++工具,以UTF-8无BOM格式编码保存,然后重新编译即 ...
- 日期增加天数--JS Date
//日期加天数的方法 //dataStr日期字符串 //dayCount 要增加的天数 //return 增加n天后的日期字符串 function dateAddDays(dataStr,dayCou ...
- mysql五:索引原理与慢查询优化
一 介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句 ...
- CSS3小知识
1.边框圆角,边框阴影 border-radius:6px; // border-radius:50%; //圆形 box-shadow: 1px 1px 1px #666; //box-shadow ...
- hadoop核心组件概述及hadoop集群的搭建
什么是hadoop? Hadoop 是 Apache 旗下的一个用 java 语言实现开源软件框架,是一个开发和运行处理大规模数据的软件平台.允许使用简单的编程模型在大量计算机集群上对大型数据集进行分 ...
- python-字符串数据类型内置方法
字符串类型内置方法 (str) 用途:描述性质的东西,如人的名字.单个爱好.地址.国家等 定义:使用单引号(' ').双引号(" ").三单引号(''' ''').三双引号(&qu ...
- Installing Apps Kattis - installingapps (贪心 + 背包)
Installing Apps Kattis - installingapps Sandra recently bought her first smart phone. One of her fri ...
- 编译Kubelet二进制文件
1. 环境 系统:CentOS 7.2 Go:1.10.3 Kubernetes:1.10.4 2. 安装最新版go 编译的Kubernetes 1.10.4要求go版本在1.9.3以上,使用下面的y ...