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));
}
}
分享到:
相关推荐
1、该资源内项目代码都是经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也...
基于PatchMatchStereo-cuda实现的双视图三维重建系统源码+项目说明.zip基于PatchMatchStereo-cuda实现的双视图三维重建系统源码+项目说明.zip基于PatchMatchStereo-cuda实现的双视图三维重建系统源码+项目说明.zip ...
•Android---UI篇---Tab Layout(选项卡布局) • •Andorid---UI篇---TableLayout(表格布局) • •Android---UI篇---RelativeLayout(相对布局) • •Android---UI篇---GridView(网格布局) • •Android---UI篇-...
SQL实验三--数据的更新操作和视图-实验报告.doc
2012-02-24我写的视图,里面有数据库设计。这些视图的设计很具代表性
Visual C++程序设计教程-07文档和视图
零基础大数据01-05-09-MySQL之视图(1).docx
行业文档-设计装置-一种基于多视图哈希的图书推荐方法.zip
第5章 视图 视图(View)是Django的MTV架构中的重要组成部分,它实现业务逻辑处理,决定如何处理用户请求和生成响应内容,并在Web页面或其他文档中显示响应结果。 本章主要内容: 定义视图 处理请求和响应 在视图中...
实现iOS的刮刮卡视图
行业文档-设计装置-三视图教学模具用可拆装铰链
使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。比如一批统计数据你可以分别用柱状图、饼图来表示。C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新。 模型-视图-...
行业文档-设计装置-一种三视图教具.zip
3.3.4 实现项目信息视图模型 3.3.5 实现项目信息视图 3.4 总结 第4章 公司和联系人 4.1 问题 4.2 设计 4.2.1 设计领域模型 4.2.2 定义company聚合和contact聚合 4.2.3 定义聚合边界 4.2.4 设计仓储 4.2.5 ...
数据库实验---视图的定义和操作.pdf
OS6开发指南视频-源码ppt:视图控制器与导航模式 通过本章的学习你已经可以判断你的应用是不是需要一个导航功能,并且知道在什么情况下选择平铺页面导航、标签导航、树形结构导航中的哪一种或者同时综合使用三种导航...
给出了关于VC/MFC文档-视图-框架体系的编程实例,详细介绍了VC/MFC文档编程,视图编程,窗口静态切分和动态切分,多文档和单文档程序设计,包含了(30个实例),资源的实例均从光盘中拷出来的,能够正常运行
ViewCapture - 实现单独对某个Android视图进行截屏。支持ScrollView, HorizontalScrollView, ListView, RecyclerView, WebView。
构建插件式的应用程序框架(八)-视图服务的简单实现
本科毕业论文设计,使用matplotlib技术设计并实现一套用于便捷、灵活的数据抓取和视图应用系统。要求系统视图展示结果多样化,可供用户选择;系统能对数据抓取目标动态调整设置;以及能够对操作行为进行记录,并将...