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

本文共 3427 字,大约阅读时间需要 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));	}}

转载于:https://www.cnblogs.com/javaexam2/archive/2012/04/24/2632490.html

你可能感兴趣的文章
微信电脑版不断崩溃
查看>>
js链式调用
查看>>
The connection to adb is down, and a severe error has occured
查看>>
牛腩新闻系统(二)——原型图、数据库文档
查看>>
数字统计
查看>>
asp.net 文件操作小例子(创建文件夹,读,写,删)
查看>>
20180620小测
查看>>
7年,OpenStack从入门到放弃|送书
查看>>
部署mariadb高可用
查看>>
iptables设置规则
查看>>
聊聊setTimeout和setInterval线程
查看>>
计算机经典书箱
查看>>
随机给出三十道四则运算题目
查看>>
双向链表的删除操作
查看>>
linux里查看最耗CPU的线程
查看>>
Newtonsoft.Json Deserialize Type 或者 同类型 变量 反序列化
查看>>
Eclipse控制项目的访问名称
查看>>
【工具】PC端调试手机端 Html 页面的工具
查看>>
[转]table中设置tr行间距
查看>>
1988-B. 有序集合
查看>>