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, ...
随机推荐
- Mybatis-连接池与事务
Mybatis 的连接池技术 Mybatis 将它自己的数据源分为三类: UNPOOLED 不使用连接池的数据源 POOLED 使用连接池的数据源 JNDI 使用 JNDI 实现的数据源 Mybati ...
- 2017.12.17 servlet 生命周期
servlet生命周期一般分为4个: 加载----实例化------服务-----销毁 (1)加载: 加载一般是在运行tomcat容器时来完成,将servlet类加载到tomcat中,或者是客户端发来 ...
- angular2+ form 表单中 input输入框的disabled属性设置无效
最近项目中遇到一个表单input设置disabled问题,直接赋值angular原生的[disabled]=“isDisabled”无效,浏览器警告信息: 无奈,只能按照控制台提示修改: 问题解决
- form 表单 和 jQuery HTML / CSS 方法($().html 类似的样式)
1 有关链接 :http://www.runoob.com/tags/tag-form.html https://www.cnblogs.com/Jxwz/p/4509618.html https:/ ...
- 面向对象编程 -------JavaScrip
本文摘要:http://www.liaoxuefeng.com/ 一定明白面向对象的两个基本概念: 类:类是对象的类型模板,例如,定义Student类来表示学生,类本身是一种类型,Student表示学 ...
- 函数定义和调用 -------JavaScript
本文摘要:http://www.liaoxuefeng.com/ 定义函数 在JavaScript中,定义函数的方式如下: function abs(x) { if (x >= 0) { ret ...
- macOS如何正确驱动集成显卡HDMI(包括视频和音频)
聊聊如何正确驱动集成显卡HDMI(包括视频和音频)必备条件:1.必须使用AppleHDA驱动声卡(仿冒.clover.applealc都可以的),使用voodoo驱动声卡应该不行的.2.dsdt或者s ...
- HTML <input> 标签如何屏蔽浏览器的自动填写?
autocomplete = "off",实测无效. <input type="text" autocomplete = "off"/ ...
- let和const在es6中的异同点
let和const这两个都是声明一个变量或函数的方法与var差不太多的效果 let的声明在for循环中,当你定义的是多少,最后你的值就是多少开始的,它只进行一次循环,不会像var那样去一遍一遍的去遍历 ...
- 1207: [HNOI2004]打鼹鼠
Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4154 Solved: 1997[Submit][Status][Discuss] Descript ...