用YAML构建数据测试DAO层

测试DAO层最常见的就是直接组织数据,调用相关的方法,然后查看数据库,看看相关数据是否在DB中正确的展示。这样测试,效率低下,容易出错,过多的依赖了人肉。如果选择测试数据来配置,根据配置的测试数据验证相关信息,或许能够达到事半功倍的效果。

  测试数据配置选择(YAML)

  在JavaBean中,传统的对象set是这样的:

  对象属性多时,对象的set显得有些复杂,自动代码生成工具生成的代码较多都是set数据的,代码看起来不够雅观,需要把测试数据和测试代码分离。可以提供参考的又xml,wiki的方式。xml的方式读取大家都比较清楚,这里介绍一下wiki:

  wiki语法

  |table|表名称|

  |字段名称1|字段名称2|字段名称3|

  |字段值|字段值|字段值|

  |字段值|字段值|字段值|

  |字段值|字段值|字段值|

  通过wiki配置的方式,和表字段一一对应,看起来比较直观,只是在字段较多时容易造成混淆,同时需要自己写代码支持wiki语法,框架级别的支持不够。xml配置也麻烦,数据阅读也不够直观。

  yaml简单,直观,方便阅读,java支持框架(http://yaml.org/)较多,所以选择yaml来配置测试数据。和TestNg保持一致,使用snakeyaml (http://code.google.com/p/snakeyaml/)

  测试过程:

  测试数据包括BaseDao对DB的基本操作:insert , update , find , findById , list , listCount , delete。由于findById和delete都是只有一个字段,所以测试数据基本生成只有insert , update ,delete , list这四个,业务模块可以根据自己的需求添加相关的Dao层测试数据。

  测试修改示例:


 说明:

  字段会自动转换成需要类型,所以long设置后面不用加L

  为空的数据不用设置,也不用删除相关的属性(尤其是insert,后面可以作为复制粘贴的参考)

  时间设置createdTime: 2011-09-23 15:03:17

  数据读取的代码

  读取yaml配置文件数据,放置到map中的代码:

  子类中测试代码

  调用data中的属性,获取到相关对象

  User user = data.get("insert");

  代码生成工具如果用yaml配置,彻底分离了测试数据准备和代码,会让测试更加简单!

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-09-25 02:10:02

用YAML构建数据测试DAO层的相关文章

android开发查询数据库的实现类和dao层

问题描述 android开发查询数据库的实现类和dao层 之前开发的项目数据单机的吧,现在在公司要开发联网的项目,就用上了数据库,我就要写这前我写的实现类和接口,还有DBHelper,那是我做网站的时候用于查询数据库的,请问做app操作数据库和我之前写的一样么,写个DBHelper,实现类集成接口,增删查改写到实现类里.感觉这流程是不怎么熟悉啊 解决方案 ActiveAndroid 一个andriod DB操作的开源库,很方便 解决方案二: 你用ado比较好点----

Unitils+hibernate+Spring+PostgreSql做dao层测试遇到的错误

这两天看陈雄华的书<Spring3.0企业开发实战>17章做dao层的测试,由于使用postgreSql数据库,所以遇到了不少错误,很多问题百度都没找到答案,所以记录下来给遇到同样错误的童鞋做个参考.下面是我遇到的问题: 1.unitils目前还不支持Hibernate4,所以使用hibernate4的童鞋,要么换hibernate3要么自己用dbUnit做测试. 2.org.unitils.core.UnitilsException: Missing configuration for or

基于WF与WCF构建数据逻辑层

WF是什么,许多对NET技术有了解的人能说出一点,但又说不清楚 不论你认为WF是什么,但不要与Jbpm ,Shark ,Biztalk,SharePoint 这些产品做比效,这些产品有共同的特点就是面向企业业务流程应用的产品,WF不是,WF面向的开发人员 WF是一个使用XML描述,具有IOC.AOP功能的面向流程控制的开发平台. 我从事工作流开发有8年了,学习WF已经有5年了,在博客园写关于WF的主题博客也快4年了,自从接触WF后我一直在解释WF与传统工作流之间的区别 可能是我即从事工作流开发,

Spring配置事务在DAO层和业务逻辑层

Spring通过AOP实现声明式事务管理.通常通过TransactionProxyFactoryBean设置Spring事务代理.我们需要一个目标对象包装在事务代理中.这个目标对象一般是一个普通Java对象的bean.当我们定义TransactionProxyFactoryBean时,必须提供一个相关的 PlatformTransactionManager的引用和事务属性. 事务属性含有上面描述的事务定义. PlatformTransactionManager: HibernateTransac

Spring+Hibernate实现的DAO层公共类

此EntityDao接口与EntityDaoImpl实现类,可取代了我们平时写的UserDao,NewsDao,CompanyDao等等,可直接供Service层调用.其中实现类的代码如下: /** * Copyright 2009-1012 the original author or authors. * My Blog site: http://www.blogjava.net/rongxh7 */ package rong.common.dao; import java.io.Seria

Spring DAO层的设计思想

近几年持久化技术领域异常喧嚣,各种框架雨后春笋般地冒出,Sun也连接不断地颁布几个持久化规范.Spring对多个持久化技术提供了集成的支持,包括Hibernate.iBatis.JDO.JPA.TopLink,此外,还通过Spring JDBC框架对JDBC API进行简化.Spring面向DAO制定了一个通用的异常体系,屏蔽具体持久化技术的异常,使业务层和具体的持久化技术达到解耦.此外,Spring提供了模板类简化各种持久化技术的使用.通用的异常体系及模板类是Spring整合各种五花八门持久化

spring-Spring MVC + hibernate service层和dao层

问题描述 Spring MVC + hibernate service层和dao层 Spring MVC + hibernate service层和dao层 方法头上都加上@Transactional会识别哪个 service层: @Override @Transactional public Future save(UserVO userVO) { this.myUserDao().saveUser(user); ... dao层: @Override @Transactional(propa

hibernate-用hql语句删除的时候执行dao层方法报这个错误,哪位大神帮我分析下错误原因,多谢

问题描述 用hql语句删除的时候执行dao层方法报这个错误,哪位大神帮我分析下错误原因,多谢 org.springframework.orm.hibernate3.HibernateSystemException: Unknown entity: java.util.ArrayList; nested exception is org.hibernate.MappingException: Unknown entity: java.util.ArrayList at org.springfram

工具类中调用dao层的方法,spring配置如何写

问题描述 工具类中调用dao层的方法,spring配置如何写 private Set readSensitiveWord() { Set set = new HashSet(); List list = sensitiveDao.findSensitive(); if(list.size()>0){ for(Sensitive s : list){ set.add(s); } } return set; } 在这个方法中我要调用dao层的方法findSensitive().sensitiveDa