日期:2014-05-16  浏览次数:20536 次

使用dbunit初始化数据

? ? 在进行自动化测试时,测试的健壮性很重要,对于数据库驱动程序来说,单元测试的健壮性主要来自于数据库数据。你写测试的时候是一种状态,但数据库的状态会随时改变,如何保证单元测试的健壮性呢? 我们可以在测试前使用dbunit来初化数据,以保证你测试中使用的数据没问题。

? ?1,使用dbunit导出数据库数据:

?

        //先保存上一次保存的数据
		   InitData.initData(); 
  Class.forName("oracle.jdbc.driver.OracleDriver");
   Connection jdbcConnection = DriverManager.getConnection(
            "jdbc:oracle:thin:@192.168.60.54:1521:DEVDB01", "neo_2011_dev", "neo_2011_dev");
   DatabaseConnection conn = new DatabaseConnection(jdbcConnection, "neo_2011_dev");
   IDatabaseConnection connection = conn;
   QueryDataSet partialDataSet = new QueryDataSet(connection);
   
   partialDataSet.addTable("pds_product", "select * from pds_product p where p.productname='***测试专用'");
   partialDataSet.addTable("web_productview", "select * from web_productview w where w.productname = '***测试专用'");
   partialDataSet.addTable("mbs_member", "select * from mbs_member m where m.membername='***测试专用'");
   partialDataSet.addTable("sto_buyEnter", "select * from sto_buyEnter aa where aa.id = -1");
   FlatXmlDataSet.write(partialDataSet, new FileOutputStream("siushop_web.xml"));

?导出后的数据是xml格式的,如下

?

<?xml version='1.0' encoding='UTF-8'?>
<dataset>
  <pds_product ID="18452" PRODUCTCODE="201111STOCK" PRODUCTNAME="&#32599;&#26126;&#20142;&#27979;&#35797;&#19987;&#29992;" BRANDCODE="BBI" BRANDNAME="By Basi" ONETYPE="FEMALE" SIZEGROUP="ALL" SIZERATIOS="&#26631;&#20934;&#23610;&#30721;&#32452;" YEAR="FW11" SEASON="2011&#31179;&#20908;" DESCRIPTION="stock_test" GENDER="F" CURRENCY="RMB" RETAILPRICE="0" WEBRETAILPRICE="188" WEBDISCOUNT="0" REFERENCEPRICE="56" ACTUALPRICE="0" TOMARKETDATE="2011-11-03 00:00:00.0" COSTACCOUNTINGTYPE="1" BESHOW="1" BESALE="1" UPDATEBY="&#20911;&#26143;" UPDATETIME="2011-11-29 11:56:04.0" TWOTYPE="WT" THREETYPE="YRFWT" ONETYPENAME="&#22899;&#35013;" TWOTYPENAME="&#22806;&#22871;" THREETYPENAME="&#32701;&#32466;&#26381;"/>
  <web_productview ID="602" PRODUCTCODE="201111STOCK" BRANDCODE="BBI" BRANDNAME="By Basi" ONETYPE="FEMALE" TWOTYPE="WT" THREETYPE="YRFWT" SIZEGROUP="80,81,82,83,84,85,86,87" SIZERATIOS="XXS,XSi,S,M,L,XL,XXL,XXXL" YEAR="FW11" SEASON="2011&#31179;&#20908;" DESCRIPTION="stock_test" GENDER="F" CURRENCY="RMB" RETAILPRICE="0" WEBRETAILPRICE="188" WEBDISCOUNT="0" COLORS="&#22825;&#34013;&#33394;,&#22909;&#33394;" TOMARKETDATE="2011-11-03 00:00:00.0" SALESVOLUME="0" BESHOW="1" BESALE="1" ACTIVE="1" PRODUCTNAME="&#32599;&#26126;&#20142;&#27979;&#35797;&#19987;&#29992;" ONETYPENAME="&#22899;&#35013;" TWOTYPENAME="&#22806;&#22871;" THREETYPENAME="&#32701;&#32466;&#26381;"/>
  <mbs_member ID="47927" MEMBERCD="0000047925" MEMBERLEVEL="1" MEMBERNAME="&#32599;&#26126;&#20142;&#27979;&#35797;&#19987;&#29992;" PASSWORD="E10ADC3949BA59ABBE56E057F20F883E" SEX="1" EMAIL="mingliang.luo@neo-concept.com.cn" CREATETIME="2011-11-05 21:38:22.0" CREATOR="123456" EMPIRICVALUE="0" STATUS="1" PERFECTINFO="1" MEMBERTYPE="2" CREATORID="20001101" ISBLACK="1"/>
  <sto_buyEnter ID="-1" BUYCODE="CG00002636" STORAGE="&#30005;&#23376;&#21830;&#21153;&#19996;&#33694;&#20179;" PRODUCTSOURCE="&#26477;&#24030;" APPLICANT="&#32599;&#26126;&#20142;" APPLYDATE="2011-12-05 00:00:00.0" ENTERSTATE="1" ISBUY="0" ISDIFFERENCE="0" BUYNOTE="1323074291894" CREATOR="20001101" CREATEDATE="2011-12-05 16:38:12.0" PROJECTNUMTOTAL="1000" REALNUMTOTAL="0" DIFFERENCENUMTOTAL="0"/>
</dataset>

?2,使用dbunit来初始化数据,我使用的方式是refresh形式的—就是xml数据里有的数据(根据主健与数据库数据比对),就进行update,没有的数据就进行insert操作;

? ? 这也就在某种意义上建立了一个虚拟schema,当然你也可以使用单独的schema进行测试,呵呵

?

public SiushopData(String name)