单元测试数据管理策略介绍

一DbUnit数据管理策略介绍

DbUnit中操作数据库的接口动作都在DatabaseOperation中

public abstract class DatabaseOperation

{

  public static final DatabaseOperation NONE=new DummyOperation();//DO NONE

  public static final DatabaseOperation UPDATE = new UpdateOperation();//根据数据内容更新表中数据

  public static final DatabaseOperation INSERT = new InsertOperation();//将数据内容插入表,可能会违反主键唯一性元素

  public static final DatabaseOperation REFRESH = new RefreshOperation();//如果表中存在数据对对应的数据则更新,不存在则插入

  public static final DatabaseOperation DELETE = new DeleteOperation();//从表中删除数据中对应的内容

  public static final DatabaseOperation DELETE_ALL = new DeleteALLOperation();//删除表中所有数据

  public static final DatabaseOperation TRUNCATE_TABLE = new TruncateTableOperation();//执行truncate table指令

  public static final DatabaseOperation CLEAN_INSERT = new CompositeOperation(DELETE_ALL,INSERT);先执行DELETE_ALL,再执行INSERT;

  public static final DatabaseOperation TRANSACTION(DatabaseOperation operation)

  {

  return new TransactionOperation(operation);

  }

  public static final DatabaseOperation CLOSE_CONNECTION(DatabaseOpetaion opetaion)

  {

  return new CloseConnectionOperation(operation);

  }

  public abstract void execute(IDatabaseConnection connection,IDataSet dataset) throws DatabaseUnitException,SQLException;

  private static class DummyOperation extends DatabaseOperation

  {

     public void execute(IDatabaseConnection connection,IDataSet dataset)

     {

     }

  }

}

 

  DbUnit使用

  DatabaseConnection connection = new DatabaseConnection(sqlConnection,schemaName);

  XlsDataSet dataSet = new XlsDataSet(new DfaultResourceLoader().getResource("excel.xls").getInputStram());

  DatabaseOperation.INSERT.execute(connection,dataSet);

 

二、Unitils的测试数据管理方式简介

  Unitils就是对上述Dbunit的数据管理进行封装。Unitils默认提供四个数据装载策略:CleanInsertLoadStrategy、InsertLoadStrategy、RefreshLoadStrategy、UpdateloadStrategy。

  CleanInsertLoadStrategy:DELETE_ALL——>INSERT 这种测试策略使用前会破坏原有数据库,一般不使用。但是如果有单独的非共享的测试数据库,这种也有独到的好处。

  public class CleanInsertLoadStrategy extends BaseDataSetLoadStrategy

  {

    @Override

    public viod doExecute(DbUnitDatabaseConnection dbUnitDatabaseConnection,IDataSet dataset) thows DatabaseUnitException,SQLException

     {

        DatabaseOperation.CLEAN_INSERT.excute(dbUnitDatabaseConnection,dataSet);

     }

   }

  InsertLoadStrategy:(Dbunit中的insert)很可能造成主键唯一性和约束性问题

  public class InsertLoadStrategy extends BaseDataSetLoadStrategy

  {

     @Override

     public void doExecute(DbUnitDatabaseConnection dbUnitDatabaseConnection,IDataSet dataset) throws DatabaseUnitException,SQLException{

     DatabaseOperation.INSERT.execute(dbUnitDatabaseConnection,dataset);

      }

   }

  RfefreshLoadStrategy:(Dbunit中的Refresh)检查数据库中是否有和dataset中相同的主键数据,如果有则数据库中数据进行更新,如果无则插入数据库

  public class RefreshLoadStrategy extends BaseDataSetLoadStrategy

  {

      @Override

      public viod doExecute(DbUnitDatabaseConnection dbUnitDatabaseConnection,IDataSet dataset) thows DatabaseUnitException,SQLException(

     DatabaseOperation.REFRESH.execute(dbUnitDatabaseConnection,dataSet);

   }

  UpdateloadStrategy:按主键更新到数据库,若数据库没有此对应主键关联的数据,则不做任何处理。

  public class UpdateLoadStrategy extends BaseDataSetLoadStrategy

  {

    @Override

    protected void doExecute(DbUnitDatabaseConnection dbUnitDatabaseConnection,IDataSet dataSet) throws DatabaseUnitException,SQLException(

    DatabaseOperation.UPDATE.execute(dbUnitDatabaseConneciont,datasSet);

  )

   }

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值