一种单元测试方法和装置制造方法

文档序号:6627530阅读:216来源:国知局
一种单元测试方法和装置制造方法
【专利摘要】本发明实施例公开了一种单元测试方法和装置,该方法可包括:对用于进行单元测试的测试数据库的API进行mock,以得到mock API;生成包括所述mock API的嵌入式关系型数据库;当需要对被测单元进行单元测试时,采用所述嵌入式关系型数据库包括的所述mock API对所述被测单元进行单元测试。本发明实施例可以降低单元测试的成本。
【专利说明】
一种单元测试方法和装置

【技术领域】
[0001]本发明涉及互联网【技术领域】,尤其涉及一种单元测试方法和装置。

【背景技术】
[0002]随着互联网技术的发展,互联网产品也越来越多,这样累积程序项目数量也越来越多。为了保证这些程序项目效率与质量,在开发过程往往需要对程序项目进行单元测试,其中,单元测试可以是对单个程序、函数、过程、类、窗口等测试单元进行验证,以验证被测试单元是否存在错误或者异常。
[0003]然而现在的单元测试都是需要先准备多个数据环境,即安装多个测试数据库,例如:mySql数据库和redis数据库,再采用多个测试数据库对被测单元进行单元测试。这样当被测试的程序项目很多时,每个程序项目都需要安装专用的测试数据库,这样对多个程序项目进行单元测序时,就需要安装很多个测试数据库。
[0004]可见,目前的单元测试技术在实现成本过高。


【发明内容】

[0005]本发明提供了一种单元测试方法和装置,可以降低单元测试的成本。
[0006]第一方面,本发明提供一种单元测试方法,包括:
[0007]对用于进行单元测试的测试数据库的应用程序编程接口(Applicat1nProgramming Interface, API)进行模拟 mock,以得到 mock API ;
[0008]生成包括所述mock API的嵌入式关系型数据库;
[0009]当需要对被测单元进行单元测试时,采用所述嵌入式关系型数据库包括的所述mock API对所述被测单元进行单元测试。
[0010]第二方面,本发明提供一种单元测试装置,包括:模拟单元、生成单元和测试单元,其中:
[0011]所述模拟单元,用于对用于进行单元测试的测试数据库的API进行模拟mock,以得到 mock API ;
[0012]所述生成单元,用于生成包括所述mock API的嵌入式关系型数据库;
[0013]所述测试单元,用于当需要对被测单元进行单元测试时,采用所述嵌入式关系型数据库包括的所述mock API对所述被测单元进行单元测试。
[0014]上述技术方案中,对用于进行单元测试的测试数据库的应用程序编程接口 API进行模拟mock,以得到mock API ;生成包括所述mock API的嵌入式关系型数据库;当需要对被测单元进行单元测试时,采用所述嵌入式关系型数据库包括的所述mock API对所述被测单元进行单元测试。由于嵌入式关系型数据库是不需要安装和部署的,相比现在技术需要安装多个测试数据库,本发明可以降低单元测试的成本。

【专利附图】

【附图说明】
[0015]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0016]图1是本发明实施例提供的一种单元测试方法的流程示意图;
[0017]图2是本发明实施例提供的一种可选的效果示意图;
[0018]图3是本发明实施例提供的另一种单元测试方法的流程示意图;
[0019]图4是本发明实施例提供的一种单元测试装置的结构示意图;
[0020]图5是本发明实施例提供的另一种单元测试装置的结构示意图;
[0021]图6是本发明实施例提供的另一种单元测试装置的结构示意图。

【具体实施方式】
[0022]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0023]本发明实施例中,被测单元可以是任何程序、函数、过程、类、窗口等可测试单元程序。
[0024]请参阅图1,图1是本发明实施例提供的一种单元测试方法的流程示意图,如图1所示,包括以下步骤:
[0025]S101、对用于进行单元测试的测试数据库的API进行模拟mock,以得到mock API。
[0026]可选的,上述用于进行单元测试的测试数据库可以是需要在本地安装和部署才可以使用的数据库,例如:mysql数据库和redis数据库等。另外,上述被mock的API可以是测试数据库中的一部分或者全部的API,例如:可以选择被测试数据库一些常用的API进行
mocko
[0027]需要说明的是,上述mock API的属性和功能与测试数据库中的API可以相同。这样可以实现采用嵌入式关系型数据库进行单元测试与采用测试数据库进行单元测试的效果一样。
[0028]S102、生成包括所述mock API的嵌入式关系型数据库。
[0029]可选的,上述嵌入式关系型数据库可以是H2数据库。
[0030]S103、当需要对被测单元进行单元测试时,采用所述嵌入式关系型数据库包括的所述mock API对所述被测单元进行单元测试。
[0031]可选的,上述采用所述嵌入式关系型数据库包括的所述mock API对所述被测单元进行单元测试可以是,将被测单元需要测试的数据插入到嵌入式关系型数据库包括的与该被测单元对应的mock API,嵌入式关系型数据库再返回相应地测试结果,以确认被测单元是否存在错误或者异常。
[0032]通过上述步骤可以实现采用嵌入式关系型数据库包括的mock API进行单元测试,由于嵌入式关系型数据库不需要装置和部署,且嵌入式关系型数据库可以采用JAVA语言进行编写,以实现一种低成本技术模拟一种高成本技术实现相同的单元测试,从而可以降低单元测试的成本。另外,由于在单元测试过程中不需要安装测试数据库,这样可以实现被测单元与嵌入式关系型数据库同在一个沙箱里进行单元测试,例如:以测试数据库包括mysql数据库和redis数据库为例,可以实现如图2所示的隔离效果,完全隔离了测试数据库,即不需要安装测试数据库,以简化测试流程,而且还可以保证程序功能的完整性。
[0033]可选的,上述方法可以应用于任何智能设备,例如:服务器、平板电脑、手机、电子阅读器、遥控器、个人计算机(Personal Computer, PC)、笔记本电脑、车载设备、网络电视、可穿戴设备等智能设备。
[0034]本实施例中,对用于进行单元测试的测试数据库的应用程序编程接口 API进行模拟mock,以得到mock API ;生成包括所述mock API的嵌入式关系型数据库;当需要对被测单元进行单元测试时,采用所述嵌入式关系型数据库包括的所述mock API对所述被测单元进行单元测试。由于嵌入式关系型数据库是不需要安装和部署的,相比现在技术需要安装多个测试数据库,本发明可以降低单元测试的成本。
[0035]请参阅图3,图3是本发明实施例提供的另一种单元测试方法的流程示意图,如图3所示,包括以下步骤:
[0036]S301、对用于进行单元测试的测试数据库的应用程序编程接口 API进行模拟mock,以得到 mock API。
[0037]可选的,上述测试数据库可以包括非关系型数据库,例如:redis数据库,这样步骤S301可以包括:
[0038]将所述非关系型数据库中的API的预设基本命令转换成所述嵌入式关系型数据库中的基本命令,以得到mock API。
[0039]其中,上述预设基本命令可以是非关系型数据库中常用的基本命令,例如:set命令和get命令,这样通过步骤S301就可以将非关系型数据库中的set命令和get命令转换为嵌入式关系型数据库中的新增(例如:insert)命令和读取(例如:select)命令。当然,本实施例中还可以是将非关系型数据库中的API的所有基本命令都转换为嵌入式关系型数据库中的基本命令。转换后的命令就得到了上述mock API,即该mock API包含转换后的命令。
[0040]可选的,上述测试数据库可以包括关系型数据库,例如:mySql数据库,这样步骤S301进一步骤还可以包括:
[0041]将所述关系型数据库中的API进行模拟mock,以得到mock API。
[0042]由于上述嵌入式关系型数据库,例如:H2数据库也是关系型数据库,这样这两种数据库的API是兼容的,从而可以直接将关系型数据库中的API进行模拟mock,以得到上述mock API,即得到上述嵌入式关系型数据库中的API。这样在单元测试时,可以直接将被测单元的数据插入至上述嵌入式关系型数据库中的API,以完成单元测试。另外,还可以将关系型数据库中的新增(例如:insert)、修改(例如:modify)和删除(例如:delete)命令mock至嵌入式关系型数据库。这样可以实现原来对关系型数据库的操作都转移至嵌入式关系型数据库中执行。
[0043]S302、生成包括所述mock API的嵌入式关系型数据库。
[0044]可选的,步骤S302可以包括:
[0045]通过注射(inject)技术和开源框架(spring)技术生成包括所述mock API的嵌入式关系型数据库。
[0046]其中,上述inject技术可以是谷歌(google) inject技术,这样可以实现通过采用这两项技术生成上述嵌入式关系型数据库。
[0047]通过步骤S302就可以实现将上述嵌入式关系型数据库替代上述测试数据库,以使用嵌入式关系型数据库进行单元测试。
[0048]S303、当需要对被测单元进行单元测试时,采用所述嵌入式关系型数据库包括的所述mock API对所述被测单元进行单元测试。
[0049]S304、清除所述嵌入式关系型数据库中测试数据,其中,所述测试数据为对所述被测试单元进行测试所产生的数据。
[0050]可选的,上述嵌入式关系型数据库可以实现对多个被测单元进行测试,每个被测单元的单元测试都是分开的,即每个被测单元的单元测试只占用嵌入式关系型数据库的一部分数据或者API,多个单元测试是相互隔离的,做得互不影响,且通过步骤S304就可以将进行单元测试时产生的数据清除,从而可以实现单元测试的事务隔离,以及避免内存数据过多给设备造成过多的功耗损失。例如:假设同一类有两个方法都要测试银行转账功能,且两个方法都是对同一账号进行测试,其中方法I账号的余额10,该账号接收银行转账10,则账号的余额是20元;如果方法2账号的余额是10元,接收银行转账10元,则余额也是20元,因为单元测试都是分开的,所有方法2转账后,该账号的余额还是20元。
[0051]本实施例,在图1所示的实施例的基础上增加了多种可选的实施方式,且都可以实现降低单元测试的成本。另外,本实施例中的实施方式都可以应用于图1所示的实施例中。
[0052]下面为本发明装置实施例,本发明装置实施例用于执行本发明方法实施例一至二实现的方法,为了便于说明,仅示出了与本发明实施例相关的部分,具体技术细节未揭示的,请参照本发明实施例一和实施例二。
[0053]请参阅图4,图4是本发明实施例提供的一种单元测试装置的结构示意图,如图4所示,包括:模拟单元41、生成单元424和测试单元43,其中:
[0054]模拟单元41,用于对用于进行单元测试的测试数据库的应用程序编程接口 API进行模拟mock,以得到mock API。
[0055]可选的,上述用于进行单元测试的测试数据库可以是需要在本地安装和部署才可以使用的数据库,例如:mysql数据库和redis数据库等。另外,上述被mock的API可以是测试数据库中的一部分或者全部的API,例如:可以选择被测试数据库一些常用的API进行
mocko
[0056]生成单元42,用于生成包括所述mock API的嵌入式关系型数据库。
[0057]可选的,上述嵌入式关系型数据库可以是H2数据库。
[0058]测试单元43,用于当需要对被测单元进行单元测试时,采用所述嵌入式关系型数据库包括的所述mock API对所述被测单元进行单元测试。
[0059]可选的,上述采用所述嵌入式关系型数据库包括的所述mock API对所述被测单元进行单元测试可以是,将被测单元需要测试的数据插入到嵌入式关系型数据库包括的与该被测单元对应的mock API,嵌入式关系型数据库再返回相应地测试结果,以确认被测单元是否存在错误或者异常。
[0060]本实施例中,对用于进行单元测试的测试数据库的应用程序编程接口 API进行模拟mock,以得到mock API ;生成包括所述mock API的嵌入式关系型数据库;当需要对被测单元进行单元测试时,采用所述嵌入式关系型数据库包括的所述mock API对所述被测单元进行单元测试。由于嵌入式关系型数据库是不需要安装和部署的,相比现在技术需要安装多个测试数据库,本发明可以降低单元测试的成本。
[0061]请参阅图5,图5是本发明实施例提供的另一种单元测试装置的结构示意图,如图5所示,包括:模拟单元51、生成单元52、测试单元53和清除单元54,其中:
[0062]模拟单元51,用于对用于进行单元测试的测试数据库的应用程序编程接口 API进行模拟mock,以得到mock API。
[0063]可选的,上述测试数据库可以包括非关系型数据库,例如:redis数据库,模拟单元51可以用于将所述非关系型数据库中的API的预设基本命令转换成所述嵌入式关系型数据库中的基本命令,以得到mock API。
[0064]其中,上述预设基本命令可以是非关系型数据库中常用的基本命令,例如:set命令和get命令,这样通过步骤S301就可以将非关系型数据库中的set命令和get命令转换为嵌入式关系型数据库中的新增(例如:insert)命令和读取(例如:select)命令。当然,本实施例中还可以是将非关系型数据库中的API的所有基本命令都转换为嵌入式关系型数据库中的基本命令。转换后的命令就得到了上述mock API,即该mock API包含转换后的命令。
[0065]可选的,上述测试数据库可以包括关系型数据库,例如:mySql数据库,这样模拟单元51进一步还可以用于将所述关系型数据库中的API进行模拟mock,以得到mock API。
[0066]由于上述嵌入式关系型数据库,例如:H2数据库也是关系型数据库,这样这两种数据库的API是兼容的,从而可以直接将关系型数据库中的API进行模拟mock,以得到上述mock API,即得到上述嵌入式关系型数据库中的API。这样在单元测试时,可以直接将被测单元的数据插入至上述嵌入式关系型数据库中的API,以完成单元测试。另外,还可以将关系型数据库中的新增(例如:insert)、修改(例如:modify)和删除(例如:delete)命令mock至嵌入式关系型数据库。这样可以实现原来对关系型数据库的操作都转移至嵌入式关系型数据库中执行。
[0067]生成单元52,用于生成包括所述mock API的嵌入式关系型数据库。
[0068]可选的,生成单元52可以用于通过注射(inject)技术和开源框架(spring)技术生成包括所述mock API的嵌入式关系型数据库。
[0069]其中,上述inject技术可以是谷歌(google) inject技术,这样可以实现通过采用这两项技术生成上述嵌入式关系型数据库。
[0070]测试单元53,用于当需要对被测单元进行单元测试时,采用所述嵌入式关系型数据库包括的所述mock API对所述被测单元进行单元测试。
[0071]清除单元54,用于清除所述嵌入式关系型数据库中测试数据,其中,所述测试数据为对所述被测试单元进行测试所产生的数据。
[0072]可选的,上述嵌入式关系型数据库可以实现对多个被测单元进行测试,每个被测单元的单元测试都是分开的,即每个被测单元的单元测试只占用嵌入式关系型数据库的一部分数据或者API,多个单元测试是相互隔离的,做得互不影响,且通过清除单元54就可以将进行单元测试时产生的数据清除,从而可以实现单元测试的事务隔离,以及避免内存数据过多给设备造成过多的功耗损失。例如:假设同一类有两个方法都要测试银行转账功能,且两个方法都是对同一账号进行测试,其中方法I账号的余额10,该账号接收银行转账10,则账号的余额是20元;如果方法2账号的余额是10元,接收银行转账10元,则余额也是20元,因为单元测试都是分开的,所有方法2转账后,该账号的余额还是20元。
[0073]本实施例,在图4所示的实施例的基础上增加了多种可选的实施方式,且都可以实现降低单元测试的成本。另外,本实施例中的实施方式都可以应用于图4所示的实施例中。
[0074]请参见图6,图6是本发明实施例提供的另一种单元测试装置的结构示意图。如图6所示,所述装置I可以包括:至少一个处理器1001,例如CPU,至少一个网络接口 1004,用户接口 1003,存储器1005,至少一个通信总线1002。其中,通信总线1002用于实现这些组件之间的连接通信。其中,用户接口 1003可以包括显示屏(Display)、键盘(Keyboard),可选用户接口 1003还可以包括标准的有线接口、无线接口。网络接口 1004可选的可以包括标准的有线接口、无线接口。存储器1005可以是高速RAM存储器,也可以是非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。存储器1005可选的还可以是至少一个位于远离前述处理器1001的存储装置。如图6所示,作为一种计算机存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及设备控制应用程序。
[0075]在图6所示的装置I中,处理器1001可以用于调用存储器1005中存储的设备控制应用程序,以实现
[0076]对用于进行单元测试的测试数据库的应用程序编程接口 API进行模拟mock,以得到 mock API ;
[0077]生成包括所述mock API的嵌入式关系型数据库;
[0078]当需要对被测单元进行单元测试时,采用所述嵌入式关系型数据库包括的所述mock API对所述被测单元进行单元测试。
[0079]可选的,所述测试数据库至少包括非关系型数据库;所述处理器1001在执行所述对用于进行单元测试的测试数据库的API进行模拟mock,以得到mockAPI时,具体可以用于:
[0080]将所述非关系型数据库中的API的预设基本命令转换成所述嵌入式关系型数据库中的基本命令,以得到mock API。
[0081]可选的,所述测试数据库进一步包括关系型数据库;所述处理器1001在执行所述对用于进行单元测试的测试数据库的API进行模拟mock,以得到mockAPI时,具体可以用于:
[0082]将所述关系型数据库中的API进行模拟mock,以得到mock API。
[0083]可选的,处理器1001在执行所述生成包括所述mock API的嵌入式关系型数据库时,具体可以用于:
[0084]通过注射inject技术和开源框架spring技术生成包括所述mock API的嵌入式关系型数据库。
[0085]可选的,处理器1001具体还可以用于:
[0086]清除所述嵌入式关系型数据库中测试数据,其中,所述测试数据为对所述被测试单元进行测试所产生的数据。
[0087]本实施例中,对用于进行单元测试的测试数据库的应用程序编程接口 API进行模拟mock,以得到mock API ;生成包括所述mock API的嵌入式关系型数据库;当需要对被测单元进行单元测试时,采用所述嵌入式关系型数据库包括的所述mock API对所述被测单元进行单元测试。由于嵌入式关系型数据库是不需要安装和部署的,相比现在技术需要安装多个测试数据库,本发明可以降低单元测试的成本。
[0088]本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory, ROM)或随机存取存储器(Random AccessMemory,简称 RAM)等。
[0089]以上所揭露的仅为本发明较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。
【权利要求】
1.一种单元测试方法,其特征在于,包括: 对用于进行单元测试的测试数据库的应用程序编程接口 API进行模拟mock,以得到mock API ; 生成包括所述mock API的嵌入式关系型数据库; 当需要对被测单元进行单元测试时,采用所述嵌入式关系型数据库包括的所述mockAPI对所述被测单元进行单元测试。
2.如权利要求1所述的方法,其特征在于,所述测试数据库至少包括非关系型数据库; 所述对用于进行单元测试的测试数据库的API进行模拟mock,以得到mock API,包括: 将所述非关系型数据库中的API的预设基本命令转换成所述嵌入式关系型数据库中的基本命令,以得到mock API。
3.如权利要求2所述的方法,其特征在于,所述测试数据库进一步包括关系型数据库; 所述对用于进行单元测试的测试数据库的API进行模拟mock,以得到mock API进一步还包括: 将所述关系型数据库中的API进行模拟mock,以得到mock API。
4.如权利要求1-3中任一项所述的方法,其特征在于,所述生成包括所述mockAPI的嵌入式关系型数据库,包括: 通过注射inject技术和开源框架spring技术生成包括所述mock API的嵌入式关系型数据库。
5.如权利要求1-3中任一项所述的方法,其特征在于,所述采用所述嵌入式关系型数据库包括的所述mock API对所述被测单元进行单元测试之后,所述方法还包括: 清除所述嵌入式关系型数据库中测试数据,其中,所述测试数据为对所述被测试单元进行测试所产生的数据。
6.一种单元测试装置,其特征在于,包括:模拟单元、生成单元和测试单元,其中: 所述模拟单元,用于对用于进行单元测试的测试数据库的应用程序编程接口 API进行模拟mock,以得到mock API ; 所述生成单元,用于生成包括所述mock API的嵌入式关系型数据库; 所述测试单元,用于当需要对被测单元进行单元测试时,采用所述嵌入式关系型数据库包括的所述mock API对所述被测单元进行单元测试。
7.如权利要求6所述的装置,其特征在于,所述测试数据库至少包括非关系型数据库; 所述模拟单元用于将所述非关系型数据库中的API的预设基本命令转换成所述嵌入式关系型数据库中的基本命令,以得到mock API。
8.如权利要求7所述的装置,其特征在于,所述测试数据库进一步包括关系型数据库; 所述模拟单元进一步还用于将所述关系型数据库中的API进行模拟mock,以得到mockAPI。
9.如权利要求6-8中任一项所述的装置,其特征在于,所述生成单元用于通过注射inject技术和开源框架spring技术生成包括所述mock API的嵌入式关系型数据库。
10.如权利要求6-8中任一项所述的装置,其特征在于,所述装置还包括: 清除单元,用于清除所述嵌入式关系型数据库中测试数据,其中,所述测试数据为对所述被测试单元进行测试所产生的数据。
【文档编号】G06F17/30GK104375933SQ201410479968
【公开日】2015年2月25日 申请日期:2014年9月18日 优先权日:2014年9月18日
【发明者】谭海潮, 卢轩华 申请人:广州华多网络科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1