专利名称:一种数据库依赖软件单元的测试方法
技术领域:
本发明涉及一种软件单元的测试方法,尤其涉及数据库依赖软件单元的测试方法。
背景技术:
在软件开发中,为了保证各个软件模块的正确性,通常采用单元测试技术来完成对软件系统中各个软件单元模块的测试。
通常,一个软件系统中都会有访问数据库的单元模块。如果这个数据库访问单元模块需要单元测试,现有的方法是运行一个实际的关系数据库,比如,运行一些商品化的关系数据库实例,在这些数据库实例中,预先创建与这个单元相关的表和数据,为这个数据库访问单元模块提供数据库数据的访问支撑。数据库中的表和数据持久化在硬盘中。由于这种数据库依赖的单元模块需要运行实际的关系数据库实例才可以完成单元测试,这样就为单元测试带来了很多弊端,如1.测试环境组建复杂。必须安装一份关系数据库拷贝,没有关系数据库将无法完成单元测试。这将造成单元测试过程本身的数据库依赖,为测试过程的轻量、便捷设置了障碍。
2.测试效率低,资源占用大。由于关系数据库的运行效率低和资源占用高,决定了测试过程的低效率和高资源占用。在数据库操作业务集中的应用中,这个问题更加突出,数据库操作占用了大量的测试时间,磁盘IO是数据库的瓶颈,导致测试迭代周期延长。
3.必须保证同一时间一个测试过程要独占一个数据库。如果多个用户或多个测试过程共用一个数据库将无法保证数据库中测试数据的完整性。这里必须保证一个用户一个数据库,一个测试过程一个数据库。这样才可以保证多个用户多个单元测试的并发。否则必须保证多个用户多个单元测试的串行化,这将导致严重的测试效率问题。
4.初始化状态创建和数据清除复杂低效。在进行测试前要向关系数据库中导入初始状态的数据。测试完成后还要清除测试的数据,为后续测试做准备。
从以上的几点可以看出,现有的利用实际的关系数据库作为单元测试的依赖环境有其固有的缺点。
另外,现有的测试技术中,有的也利用模仿对象(mock)来实现对数据库依赖软件单元测试的问题。但是数据库的模仿对象要模仿Sql语法的检验,和数据库结果集合的数据返回,模仿对象的实现和维护代价很高。尤其是对Sql语法检验更加麻烦,因为模仿对象必须实现ANSI SQL92以上的标准语法检查器。Sql语句与编程语言混合的情况正是错误多发的地方,如果模仿对象没有实现Sql语法检查就会遗漏了对这一方面的测试,使其测试覆盖不完整。当然,模仿对象可以做到对sql语句的解析分析,来判定sql语句的语法正确性。我们知道,这样的模仿对象的代价非常高,相当于实现了关系数据库中的sql解析部分,工作量过于庞大。
发明内容
本发明所要解决的技术问题在于提供一种数据库依赖软件单元的测试方法、综合测试系统及综合测试方法,提高数据库相关软件测试的测试效率,降低测试的复杂度,提高测试覆盖范围。
本发明提供一种数据库依赖软件单元的测试方法,采用嵌入式内存数据库作为测试数据载体,进行所述数据库依赖的软件单元的测试。
所述的采用嵌入式内存数据库作为测试数据载体,包括如下步骤在测试单元中创建嵌入式内存数据库,并启动数据库;在测试单元中为嵌入式内存数据库创建需要的表和数据;由测试单元实例化所述被测试的数据库依赖软件单元;由测试单元向数据库依赖软件单元中注入嵌入式内存数据库连接。
所述的进行数据库依赖的软件单元的测试,包括如下步骤由测试单元测试所述数据库依赖软件单元中的方法,方法中对数据库的操作是对所述嵌入式数据库内存数据库的操作;利用单元测试中的断言判断数据库操作方法的正确性。
本发明还提供一种数据库依赖软件单元的综合测试系统,包括依赖数据的被测软件单元,还包括测试单元,用于完成对所述被测单元的测试;环境状态检查模块,用于检查当前的环境状态是测试状态还是生产状态;内存数据库管理模块,用于提供嵌入式内存数据库的管理;实际数据库,用于提供实际数据库用于测试;数据库连接工厂,用于提供数据库连接,在测试状态时,返回内存数据库连接,在生产状态时,返回实际数据库连接。
本发明进而还提供一种数据库依赖软件单元的综合测试方法,包括如下步骤由数据库连接工厂根据当前环境判断是处于测试状态还是生产状态;在测试状态时,由连接工厂返回内存数据库连接,采用嵌入式内存数据库作为测试数据载体,进行所述数据库依赖的软件单元的测试;在生产状态时,由连接工厂返回实际数据库连接。
本发明与现有技术相比,避免了依赖实际数据库测试的缺点,也避免了模仿对象的实现维护复杂的问题。本发明利用嵌入式内存数据库来完成数据库依赖软件单元的测试,大大提高了数据库相关软件测试的测试效率,降低了测试的复杂度,提高了测试覆盖范围,提供了Sql语法的检查,减少了实际数据库的安装量,节省了数据库的投资。同时,由于本发明测试方法是临时在内存中创建数据库,每个被测单元的所依赖的数据库完全不同,这样可以实现被测单元互相独立,做到被测单元的并发测试,进一步的提高了测试效率。
图1为本发明所述的采用嵌入式内存数据库作为测试数据载体,进行所述数据库依赖的软件单元的测试实施例流程示意图;图2为本发明所述的数据库依赖软件单元的综合测试系统的实施例模块结构图;图3为本发明所述的数据库依赖软件单元的综合测试方法实施例的工作流程图;图4为利用本发明进行实际测试的实施例效果示意图。
具体实施例方式
本方法采用嵌入式内存数据库来替代通常的关系数据库,作为依赖数据库的软件单元的测试数据载体。比如,Java语言开发的软件系统,可以采用Hsqldb数据库(hsqldb.sourceforge.net)。Hsqldb支持ANSI-92SQL标准,事务处理,视图支持,内置JDBC驱动程序的关系型数据库。
Hsqldb是100%的纯java实现,160K的微型内核,支持内存的数据存储。内存数据库的特点,决定了他轻便的,与语言紧密结合的优点。由于数据在内存中存储,其数据操作的效率远远高于传统数据库磁盘IO的效率。
如图1所示,为本发明所述的采用嵌入式内存数据库作为测试数据载体,进行所述数据库依赖的软件单元的测试实施例流程示意图,首先在测试单元中创建嵌入式内存数据库,并启动数据库(步骤101);然后在测试单元中为嵌入式内存数据库创建需要的表和数据,可以用SQL语句创建,也可以导入数据库脚本文件来创建表和数据(步骤102);由测试单元实例化所述被测试的数据库依赖软件单元(步骤103);由测试单元向数据库依赖软件单元中注入嵌入式内存数据库连接(步骤104);由测试单元测试所述数据库依赖软件单元中的方法,方法中对数据库的操作是对所述嵌入式数据库内存数据库的操作(步骤105);利用单元测试中的断言判断数据库操作方法的正确性(步骤106)。
如图2所示,为本发明所述的数据库依赖软件单元的综合测试系统的实施例模块结构图,包括依赖数据的被测软件单元201,测试单元202,环境状态检查模块203,内存数据库管理模块204,实际数据库205,数据库连接工厂206。
其中,测试单元202,用于完成对所述被测单元的测试;环境状态检查模块203,用于检查当前的环境状态是测试状态还是生产状态;内存数据库管理模块204,用于提供嵌入式内存数据库的管理;实际数据库205,用于提供实际数据库用于测试;数据库连接工厂206,用于提供数据库连接,在测试状态时,返回内存数据库连接,在生产状态时,返回实际数据库连接。
数据库连接工厂206可以根据但前环境判断是测试状态还是生产状态。在测试状态的时候,连接工厂返回内存数据库;在生产状态的时候,连接工厂返回实际的数据库连接。
由于测试中临时在内存中创建数据库,每个被测单元的所依赖的数据库完全不同,这样可以实现被测单元互相独立,做到被测单元的并发测试,进一步的提高了测试效率。
如图3所示,为本发明所述的数据库依赖软件单元的综合测试方法实施例的工作流程图。首先运行数据库依赖类(步骤301);然后判断上下文环境(步骤302);如果是在测试状态,则数据库连接工厂返回内存数据库连接(步骤303);测试单元初始化内存数据库,为内存数据库添加测试用例数据(步骤304);测试单元发起测试输入测试数据(步骤305);被测单元访问内存数据库执行业务逻辑(步骤306);测试单元比较被测单元返回结果与期望(步骤307);给出测试结果(步骤308);如果在生产状态,则数据库连接工厂返回实际数据库连接(步骤309);然后访问数据库中的实际业务数据(步骤310);执行业务逻辑(步骤311);返回执行结果(步骤312)。
如图4所示,为利用本发明进行实际测试的实施例效果示意图。在测试状态时,不同的被测单元访问不同的内存数据库,不同的内存数据库装有各自的测试依赖数据。各个被测单元可以同时在应用服务器中完成测试工作,大大地提高了测试效率。而在实际生产状态,连接的是唯一的实际数据库。
利用本发明,整个测试过程只需要嵌入式内存数据库支持,嵌入式内存数据库维护简单,与普通的数据库在数据操作上高度一致,被测试的代码更本分不清是用普通的数据库还是嵌入式内存数据库。内存数据库没有IO操作,又是一个标准的数据库,即提高了测试效率,又简化了测试维护的工作。
权利要求
1.一种数据库依赖软件单元的测试方法,通过测试单元完成数据库依赖的软件单元的测试,其特征在于,采用嵌入式内存数据库作为测试数据载体,进行所述数据库依赖的软件单元的测试。
2.如权利要求1所述的方法,其特征在于,所述采用嵌入式内存数据库作为测试数据载体,包括如下步骤在测试单元中创建嵌入式内存数据库,并启动数据库;在测试单元中为嵌入式内存数据库创建需要的表和数据;由测试单元实例化所述被测试的数据库依赖软件单元;由测试单元向数据库依赖软件单元中注入嵌入式内存数据库连接。
3.如权利要求1所述的方法,其特征在于,所述进行数据库依赖的软件单元的测试,包括如下步骤由测试单元测试所述数据库依赖软件单元中的方法;利用单元测试中的断言判断数据库操作方法的正确性。
4.如权利要求1所述的方法,其特征在于,所述的由测试单元实例化所述被测试的数据库依赖软件单元步骤,包括由测试单元初始化嵌入式内存数据库,为内存数据库添加测试用例数据。
5.如权利要求3所述的方法,其特征在于,所述的由测试单元测试数据库依赖软件单元中的方法步骤,所述方法中对数据库的操作是对所述嵌入式数据库内存数据库的操作。
6.如权利要求3所述的方法,其特征在于,所述的由测试单元测试数据库依赖软件单元中的方法步骤,包括如下步骤由测试单元发起测试,输入测试数据;被测单元访问嵌入式内存数据库,执行业务逻辑;由测试单元将被测单元返回的结果与期望相比较。
7.一种数据库依赖软件单元的综合测试系统,包括依赖数据的被测软件单元,其特征在于,还包括测试单元,用于完成对所述被测单元的测试;环境状态检查模块,用于检查当前的环境状态是测试状态还是生产状态;内存数据库管理模块,用于提供嵌入式内存数据库的管理;实际数据库,用于提供实际数据库用于测试;数据库连接工厂,用于提供数据库连接,在测试状态时,返回内存数据库连接,在生产状态时,返回实际数据库连接。
8.一种数据库依赖软件单元的综合测试方法,其特征在于,包括如下步骤由数据库连接工厂根据当前环境判断是处于测试状态还是生产状态;在测试状态时,由连接工厂返回内存数据库连接,采用嵌入式内存数据库作为测试数据载体,进行所述数据库依赖的软件单元的测试;在生产状态时,由连接工厂返回实际数据库连接。
9.如权利要求8所述的方法,其特征在于,其特征在于,所述采用嵌入式内存数据库作为测试数据载体,包括如下步骤在测试单元中创建嵌入式内存数据库,并启动数据库;在测试单元中为嵌入式内存数据库创建需要的表和数据;由测试单元实例化所述被测试的数据库依赖软件单元;由测试单元向数据库依赖软件单元中注入嵌入式内存数据库连接。
10.如权利要求8所述的方法,其特征在于,所述进行数据库依赖的软件单元的测试,包括如下步骤由测试单元测试所述数据库依赖软件单元中的方法;利用单元测试中的断言判断数据库操作方法的正确性。
全文摘要
本发明提供一种数据库依赖软件单元的测试方法,采用嵌入式内存数据库作为测试数据载体,进行所述数据库依赖的软件单元的测试。本发明还提供一种数据库依赖软件单元的综合测试系统及方法,包括被测软件单元,测试单元,环境状态检查模块,内存数据库管理模块,实际数据库,以及数据库连接工厂,由数据库连接工厂根据当前环境判断是处于测试状态还是生产状态,如果在测试状态时,由连接工厂返回内存数据库连接,采用嵌入式内存数据库作为测试数据载体,进行所述数据库依赖的软件单元的测试,如果在生产状态时,由连接工厂返回实际数据库连接。本发明提高了数据库相关软件测试的测试效率,降低了测试的复杂度。
文档编号G06F11/36GK1908914SQ20051008877
公开日2007年2月7日 申请日期2005年8月1日 优先权日2005年8月1日
发明者杜玄, 苏丽辉 申请人:中兴通讯股份有限公司