技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 系统架构 --> 用YAML构建数据测试DAO层

用YAML构建数据测试DAO层

浏览:1982次  出处信息

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

测试数据配置选择(YAML)

    

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

    pvs.setId(100L);
    pvs.setCookieAdvert(1);
    pvs.setCookieAdList("1");

       对象属性多时,对象的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层测试数据。

     测试修改示例:

insert: !!com.longtask.analysis.report.domain.entity.User
  pv: 1
  uv: 1
  ip: 1
  liveTime:
  isDate: 1
  startTime: 1
  endTiem: 1
  addTime: 1
update: !!com.longtask.analysis.report.domain.entity.User
  pv: 1
  uv: 1
  ip: 1
find: !!com.longtask.analysis.report.domain.entity.User
  pv: 1
  uv: 1
  ip: 1
list: !!com.longtask.analysis.report.domain.entity.User
  pv: 1
  uv: 1
  ip: 1

    说明:

  • 字段会自动转换成需要类型,所以long设置后面不用加L
  • 为空的数据不用设置,也不用删除相关的属性(尤其是insert,后面可以作为复制粘贴的参考)
  • 时间设置createdTime: 2011-09-23 15:03:17
  •     

    数据读取的代码

        

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

        public Map getYamlData(String name){

                 try {

                     Yaml yaml = new Yaml();

                     @SuppressWarnings("unchecked")

                     Map data = (Map)yaml.load(this.getClass()

                             .getResourceAsStream("/" + name));

                     return data;

                 } catch (Exception e) {

                     logger.error("init yaml error : " , e);

                     throw new RuntimeException("init yaml error : " , e);

                 }

             }

        子类中测试代码

        @BeforeMethod

             public void setBefore() {

                 String pg = this.getClass().getPackage().getName().replace(".", "/");

                 data = super.getYamlData( pg + "/UserDaoTest.yaml");

             }

        private Map  data;

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

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

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

    建议继续学习:

    1. 编程珠玑:对DAO层的一点修改    (阅读:3046)
    2. Google App Engine的app.yaml详细说明    (阅读:2120)
    3. 序列化格式YAML初探    (阅读:2166)
    QQ技术交流群:445447336,欢迎加入!
    扫一扫订阅我的微信号:IT技术博客大学习
    © 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

    京ICP备15002552号-1