51Testing丛书连载:(十) 互联网单元测试及实践

发表于:2008-8-19 16:57

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:陈卫俊 赵璨 周磊等    来源:51Testing软件测试网

  7.2.2  用DbUnit进行断言
  要进行断言,必须知道期待结果是什么,实际结果是什么。上一节已经介绍了如何用DbUnit载入XML文件中的数据。这里我们仍然用这个方法载入期待结果。同样,期待结果的数据准备还是使用XML文件,如下:
  代码7.6  期待结果文件 expectedResult.xml

1 <?xml version="1.0" encoding="GB2312"?>
2 <dataset>
3  <EXP_TABLE id="001" name="mike"a />
4 </dataset>

  第3行,期待数据库中有一条记录id为001,name为mike。因为不需要插入数据库,这里的表名EXP_TABLE也不用和数据库中物理表名一致。
再用上一节的方法载入这个数据文件,存到DataSet中。现在期待结果有了,剩下的就是要从数据库中查出实际结果。这就需要用到另一个DataSet类——QueryDataSet。
  代码7.7  查询数据库

01 public class TestDbUnit {
02  @Test
03  public void testDbUnit() {
04   ...
05   QueryDataSet queryDataSet = new QueryDataSet(connection);
06   queryDataSet.addTable("TABLE", "select id, name from TABLE");
07   ...
08  }
09 }

  第5行,用IDatabaseConnection对象作为参数初始化一个QueryDataSet对象。
  第6行,使用addTable方法将查询结果存放到queryDataSet中。该方法有两个参数,第一个参数标志queryDataSet中的表名,第二个参数传入需要执行的select语句。
  这样我们既获得了期待结果(一个FlatXmlDataSet对象),又获得了实际结果(一个QueryDataSet对象),接下来就可以用DbUnit自带的断言函数Assertion.assertEquasl做比较。
  该方法有两个参数,均为ITable对象,前者表明期待结果,后者为实际结果。这两个参数的顺序要正确,否则在分析断言结果时会混淆期待结果和实际结果。
  这种比较方式仍然没有避免表结构变更带来的影响,比如现在id字段改名成sid,那么代码也要相应改变。代码和表结构仍然没有分离。我们可以通过字段过滤功能消除这种影响。
  代码7.8  筛选字段进行比较

01 @Test
02 public void testDbUnit() {
03  IDataSet expDataSet = getDataSet("expectedResult.xml");
04
05  QueryDataSet queryDataSet = new QueryDataSet(connection);
06  queryDataSet.addTable("TABLE", "select * from TABLE");
07
08  // 根据期待结果过滤字段
09  ITable filterdTables = DefaultColumnFilter.includedColumnsTable(
10   queryDataSet.getTable("EXP_TABLE"), expDataSet
11       .getTable("TABLE").getTableMetaData(). getColumns());
12  Assertion.assertEquals(expDataSet.getTable("EXP_TABLE"), filterdTables);
13 }

  第3行,调用自定义的getDataSet方法获得期待结果。
  第5~6行,将所有字段取出,获得实际结果。
  第9~11行,调用DefaultColumnFilter的includedColumnsTable方法,该方法第一个参数指定待过滤字段的表,第二个参数指定保留的字段。这里根据期待结果中希望比较的字段来过滤实际取出的字段。
  第12行,将期待结果和过滤后的实际结果进行比较。
  这种方式也有缺点,比如需要取出所有字段,带来了额外的性能消耗。

 

连载一  连载二  连载三  连载四  连载五  连载六  连载七  连载八  连载九

本文选自:《51Testing软件测试作品系列》之三的 互联网单元测试及实践 ,本站经电子工业出版社和作者的授权,近期将进行部分章节的连载,敬请期待!

版权声明:51Testing软件测试网及相关内容提供者拥有51testing.com内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像。51testing软件测试网欢迎与业内同行进行有益的合作和交流,如果有任何有关内容方面的合作事宜,请联系我们

22/2<12
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号