有时候,仅仅依靠框架提供的xml方式来插入和删除数据时不够的,有的时候需要在测试代码中执行一些sql语句,以下是介绍如何便捷的做到这一点
前几章节我们介绍过了,我们是靠dbuint来进行测试数据的维护的,而dbunit给我们提供了一个非常好的接口IDatabaseTester,这个接口中定义了一些与数据库连接相关的操作,在我们的框架中也是用这种方式来维护数据库连接的。
1.定义一个接口
public interface IDatabaseTesterAware {
/**
* 设置Tester对象
* @param databaseTester
* @see org.dbunit.IDatabaseTester
*/
public void setIDatabaseTester(IDatabaseTester databaseTester);
}
2.在我们的testCase类中实现该接口-一般在basetestcase中实现,具体的测试类直接可以使用了
@TestExecutionListeners({ XmlDatasetProviderListener.class, TransactionalTestExecutionListener.class })
public class BaseHopTestCase extends AbstractJUnit4SpringContextTests implements IDatabaseTesterAware{
protected IDatabaseTester databaseTester;
@Override
public void setIDatabaseTester(IDatabaseTester databaseTester) {
this.databaseTester = databaseTester;
}
}
3.在框架中将IDatabaseTester注入
找到我们框架里的DatasetProviderListener的prepareTestInstance方法,在该方法的最后
//将测试IDatabaseTester注入到测试类中
if(testInstance instanceof IDatabaseTesterAware){//在这里为testcase中的IDatabaseTester赋值
IDatabaseTesterAware databaseTesterAware = (IDatabaseTesterAware)testInstance;
databaseTesterAware.setIDatabaseTester(databaseTester);
}
这样我们的基类testcase中就可以定义常用到的方法了,如下
@TestExecutionListeners({ XmlDatasetProviderListener.class, TransactionalTestExecutionListener.class })
public class BaseTestCase 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));
}
}
其中有一个重要的功能就是刷新物化视图的功能
分享到:
相关推荐
> **XMind2TestCase** 工具,提供了一个高效测试用例设计的解决方案! ### 一、背景 软件测试过程中,最重要、最核心就是测试用例的设计,也是测试童鞋、测试团队日常投入最多时间的工作内容之一。 然而,传统的...
XMind2TestCase基于python实现,提供了一个高效测试用例设计的解决方案
0.20 python单元测试-TestCase&TestSuite.mp4
编写本文的主要目的是引导公司的自动化工作的切实开展,是对自动化测试的具体实施方案的讨论;对于自动化测试过程的理论分析不是本文的重点。本文目录如下内容: 一、概述 1.1 文档总述 1.2 目标读者 1.3 词语...
3-2 准备一个被测APP 3-3 工欲善其事必先利其器-自动化测试环境准备 3-4 Android App自动化测试(一) 3-5 Android App自动化测试(二) 3-6 Android App自动化测试(三) 3-7 UnitTest框架之TestFixture简介 3-8 ...
Unit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个。 JUnit有它自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元...
然后针对这个,设计了现在的UI自动化测试框架,实现了简单的通用,每次只需要维护好用例就行了,维护成本降低。 大家都知道,基于selenium函数,对页面元素的操作,很多都是点击、输入参数、处理iframe、处理alert...
本文总结介绍接口测试框架开发,环境使用python3+selenium3+unittest测试框架及ddt数据驱动,采用Excel管理测试用例等集成测试数据功能,以及使用HTMLTestRunner来生成测试报告,目前有开源的poman、Jmeter等接口...
使用vue-testcase-minder-editor插件+vue2.0实现的思维导图实例
xmind2testcase解析测试用例导入到禅道时,优先级自动显示(1、2、3→高、中、低)无需手动修改,测试类型可根据实际项目情况自定义 修改方式: 找到xmind2testcase安装的路径,如果使用的是pip3安装的,一般可以在...
XMind2TestCase基于python实现,提供了一个高效测试用例设计的解决方案
测试控制台应用程序的代码TestCase,运行成功会在命令行窗口显示提示内容
前端开源库-fuse-box-testcase1保险丝盒-测试用例1,零
Laravel开发-laravel-swagger-testcase Laravel文件API-处理具有Laravel存储的文件
前端开源库-fuse-box-testcase3保险丝盒-测试用例3,保险丝盒测试用例-需要(“保险丝盒-测试用例3/dist/foo.js”)
3.3.2. 写一个基TestCase。 10 3.3.3. 测试数据库的有效方法。 10 3.3.4. seed文件的设置 10 3.3.5. 一般的测试的步骤 11 4. 常见问题 1 4.1. DBUnit使用问题 1 4.1.1. 在运行测试用例的时候,出现org.dbunit....
一:unittest是python自带的一个单元测试框架,类似于java的junit,基本结构是类似的。 基本用法如下: 1.用import unittest导入unittest模块 2.定义一个继承自unittest.TestCase的测试用例类,如 class abcd...
之前分享过一篇安卓UI测试,但是没有实现数据与代码分离,后期维护成本较高,所以最近抽空优化了一下。 不想看文章得可以直接去Github,欢迎拍砖 大致结构如下: testyaml管理用例,实现数据与代码分离,一个模块一...
一个Test Case实例是一个测试用例,完整的测试流程包括测试前准备环境的搭建(setUp)、实现测试过程的代码(run)、以及 测试后环境的还原(tearDown)。 (2)Test Suite Test Suite用来组装单个测试用例,可以...
python自带包里面有个unittest.py模块,提供了python单元测试的基本框架,现在简要分析下。 其中有几个要点: 1、要使用unittest模块,须先导入它。 import unittest 2、自定义类需要继承自 unittest.TestCase 类 3...