博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个通用的单元测试框架的思考和设计09-实现篇-视图操作
阅读量:5934 次
发布时间:2019-06-19

本文共 3357 字,大约阅读时间需要 11 分钟。

01)概述

基于DBunit做基于数据库的单元测试,数据库表的准备数据由框架负责插入和自动清理,目前数据库中很多业务操作是基于视图的(包括普通视图和物理视图),hop测试框架本身并不支持对视图的直接插入和更新操作,因此对视图做测试准备数据的时候,必须造出与视图相关联的各个表的数据,再进行测试

02)普通视图

一般性的视图,对这种视图做准备数据只有找到该视图的关联表,利用框架提供的工具类DbunitManager造出测试数据(造的数据必须和视图逻辑关联),然后运行单元测试用例,这种视图只要基础表里插入了数据,则视图中会自动实时同步过来(可以把这类视图简单理解为只读视图)。

03)物化视图

物化视图是oracle数据库特有的一种视图,首先它属于视图的范畴,因此满足视图的定义,同时,有自身的特点,就是当向物理视图关联的数据库表插数据时,物理视图里的数据同步并不一定是实时的,为了保证我们造的测试数据能够实时的在物理视图中得以体现,必须在基础表数据插入后,对物理视图做手动刷新-强制物理视图同步最新数据。

使用方法

  • 准备于物化视图相关联的几张基础数据表的数据-通过dbunit xml格式,详细参考单元测试规范章节
  • 编写测试代码-和先前的做法完全一致
  • 在该测试用例执行前执行物化视图的刷新操作

public void testGetProductbyUserId() {

       String mv = "ECC_FND.PRODUCT_LINE_MV";//要进行刷新的物化视图的名字

        refeshMaterializedView(mv );//测试用例执行前刷新一下,保证准备好的基础数据同步到视图中

        List<CmiAssistmodel> list=baseSeachConditionService.getProductbyUserId();//执行具体的测试

        assertThat(list.size(), equalTo(2));//断言

    }

03)物化视图

刷新物化视图的操作见 void refeshMaterializedView(String materializedViewName)

/** * HOP测试框架的基类,定义了常用到的工具类 * @author WangXuzheng * @see com.haier.openplatform.test.dbunit.XmlDatasetProviderListener * @see com.haier.openplatform.test.dbunit.IDatabaseTesterAware * @see org.springframework.test.context.transaction.TransactionalTestExecutionListener */@TestExecutionListeners({ XmlDatasetProviderListener.class, TransactionalTestExecutionListener.class })public class BaseHopTestCase extends AbstractJUnit4SpringContextTests implements IDatabaseTesterAware{	protected IDatabaseTester databaseTester;	@Override	public void setIDatabaseTester(IDatabaseTester databaseTester) {		this.databaseTester = databaseTester;	}	/**	 * 利用dbunit的connection执行sql语句	 * @param sql	 */	protected void executeSQL(String sql){		Connection connection = null;		Statement statement = null;		try {			connection = databaseTester.getConnection().getConnection();			statement = connection.createStatement();			statement.execute(sql);		}catch (Exception e) {			ReflectionUtils.handleReflectionException(e);		}finally{			closeStatement(statement);			closeConnection(connection);		}	}	/**	 * 关闭数据库连接	 * @param connection	 */	protected void closeConnection(Connection connection) {		if(connection != null){			try {				connection.close();			} catch (SQLException e) {				ReflectionUtils.handleReflectionException(e);			}		}	}	/**	 * 关闭sql语句对象	 * @param statement	 */	protected void closeStatement(Statement statement){		if(statement != null){			try {				statement.close();			} catch (SQLException e) {				ReflectionUtils.handleReflectionException(e);			}		}	}		/**	 * 生成默认的刷新物化视图的sql语句--仅限于oracle	 * @param materializedViewName 物化视图的名字	 * @return	 */	protected String generateRefeshMaterializedViewSql(String materializedViewName){		StringBuffer stringBuffer = new StringBuffer();		stringBuffer.append("BEGIN")		  .append("  DBMS_SNAPSHOT.REFRESH")		  .append("  (LIST                 => '")		  .append(materializedViewName).append("'")		  .append("  ,PUSH_DEFERRED_RPC    => TRUE")		  .append("  ,REFRESH_AFTER_ERRORS => FALSE")		  .append("  ,PURGE_OPTION         => 1")		  .append("  ,PARALLELISM          => 0")		  .append("  ,ATOMIC_REFRESH       => TRUE")		  .append("  ,NESTED               => FALSE);")		  .append("  END;");		return stringBuffer.toString();	}		/**	 * 刷新指定的物化视图	 * @param materializedViewName 物化视图名字	 */	protected void refeshMaterializedView(String materializedViewName){		executeSQL(generateRefeshMaterializedViewSql(materializedViewName));	}}

转载地址:http://vujtx.baihongyu.com/

你可能感兴趣的文章
KSImageNamed-Xcode-master
查看>>
tomcat 8.0虚拟机配置文档
查看>>
轻松实现基于Heartbeat的高可用web服务集群
查看>>
pxc群集搭建
查看>>
JS中加载cssText延时
查看>>
常用的脚本编程知识点
查看>>
坐标转换convertRect
查看>>
XILINX_zynq_详解(6)
查看>>
计算机网络术语总结4
查看>>
新手小白 python之路 Day3 (string 常用方法)
查看>>
HTML5 Geolocation API工作原理[转载]
查看>>
soapUI的简单使用(webservice接口功能测试)
查看>>
框架 Hibernate
查看>>
python-while循环
查看>>
【微信小程序】再次授权地理位置getLocation+openSetting使用
查看>>
手机端上传图片及java后台接收和ajaxForm提交
查看>>
HDU 5030 Rabbit's String
查看>>
【MSDN 目录】C#编程指南、C#教程、ASP.NET参考、ASP.NET 4、.NET Framework类库
查看>>
jquery 怎么触发select的change事件
查看>>
angularjs指令(二)
查看>>