一種單元測(cè)試方法和裝置制造方法
【專利摘要】本發(fā)明實(shí)施例公開(kāi)了一種單元測(cè)試方法和裝置,該方法可包括:對(duì)用于進(jìn)行單元測(cè)試的測(cè)試數(shù)據(jù)庫(kù)的API進(jìn)行mock,以得到mock API;生成包括所述mock API的嵌入式關(guān)系型數(shù)據(jù)庫(kù);當(dāng)需要對(duì)被測(cè)單元進(jìn)行單元測(cè)試時(shí),采用所述嵌入式關(guān)系型數(shù)據(jù)庫(kù)包括的所述mock API對(duì)所述被測(cè)單元進(jìn)行單元測(cè)試。本發(fā)明實(shí)施例可以降低單元測(cè)試的成本。
【專利說(shuō)明】
一種單元測(cè)試方法和裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及互聯(lián)網(wǎng)【技術(shù)領(lǐng)域】,尤其涉及一種單元測(cè)試方法和裝置。
【背景技術(shù)】
[0002]隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,互聯(lián)網(wǎng)產(chǎn)品也越來(lái)越多,這樣累積程序項(xiàng)目數(shù)量也越來(lái)越多。為了保證這些程序項(xiàng)目效率與質(zhì)量,在開(kāi)發(fā)過(guò)程往往需要對(duì)程序項(xiàng)目進(jìn)行單元測(cè)試,其中,單元測(cè)試可以是對(duì)單個(gè)程序、函數(shù)、過(guò)程、類、窗口等測(cè)試單元進(jìn)行驗(yàn)證,以驗(yàn)證被測(cè)試單元是否存在錯(cuò)誤或者異常。
[0003]然而現(xiàn)在的單元測(cè)試都是需要先準(zhǔn)備多個(gè)數(shù)據(jù)環(huán)境,即安裝多個(gè)測(cè)試數(shù)據(jù)庫(kù),例如:mySql數(shù)據(jù)庫(kù)和redis數(shù)據(jù)庫(kù),再采用多個(gè)測(cè)試數(shù)據(jù)庫(kù)對(duì)被測(cè)單元進(jìn)行單元測(cè)試。這樣當(dāng)被測(cè)試的程序項(xiàng)目很多時(shí),每個(gè)程序項(xiàng)目都需要安裝專用的測(cè)試數(shù)據(jù)庫(kù),這樣對(duì)多個(gè)程序項(xiàng)目進(jìn)行單元測(cè)序時(shí),就需要安裝很多個(gè)測(cè)試數(shù)據(jù)庫(kù)。
[0004]可見(jiàn),目前的單元測(cè)試技術(shù)在實(shí)現(xiàn)成本過(guò)高。
【發(fā)明內(nèi)容】
[0005]本發(fā)明提供了一種單元測(cè)試方法和裝置,可以降低單元測(cè)試的成本。
[0006]第一方面,本發(fā)明提供一種單元測(cè)試方法,包括:
[0007]對(duì)用于進(jìn)行單元測(cè)試的測(cè)試數(shù)據(jù)庫(kù)的應(yīng)用程序編程接口(Applicat1nProgramming Interface, API)進(jìn)行模擬 mock,以得到 mock API ;
[0008]生成包括所述mock API的嵌入式關(guān)系型數(shù)據(jù)庫(kù);
[0009]當(dāng)需要對(duì)被測(cè)單元進(jìn)行單元測(cè)試時(shí),采用所述嵌入式關(guān)系型數(shù)據(jù)庫(kù)包括的所述mock API對(duì)所述被測(cè)單元進(jìn)行單元測(cè)試。
[0010]第二方面,本發(fā)明提供一種單元測(cè)試裝置,包括:模擬單元、生成單元和測(cè)試單元,其中:
[0011]所述模擬單元,用于對(duì)用于進(jìn)行單元測(cè)試的測(cè)試數(shù)據(jù)庫(kù)的API進(jìn)行模擬mock,以得到 mock API ;
[0012]所述生成單元,用于生成包括所述mock API的嵌入式關(guān)系型數(shù)據(jù)庫(kù);
[0013]所述測(cè)試單元,用于當(dāng)需要對(duì)被測(cè)單元進(jìn)行單元測(cè)試時(shí),采用所述嵌入式關(guān)系型數(shù)據(jù)庫(kù)包括的所述mock API對(duì)所述被測(cè)單元進(jìn)行單元測(cè)試。
[0014]上述技術(shù)方案中,對(duì)用于進(jìn)行單元測(cè)試的測(cè)試數(shù)據(jù)庫(kù)的應(yīng)用程序編程接口 API進(jìn)行模擬mock,以得到mock API ;生成包括所述mock API的嵌入式關(guān)系型數(shù)據(jù)庫(kù);當(dāng)需要對(duì)被測(cè)單元進(jìn)行單元測(cè)試時(shí),采用所述嵌入式關(guān)系型數(shù)據(jù)庫(kù)包括的所述mock API對(duì)所述被測(cè)單元進(jìn)行單元測(cè)試。由于嵌入式關(guān)系型數(shù)據(jù)庫(kù)是不需要安裝和部署的,相比現(xiàn)在技術(shù)需要安裝多個(gè)測(cè)試數(shù)據(jù)庫(kù),本發(fā)明可以降低單元測(cè)試的成本。
【專利附圖】
【附圖說(shuō)明】
[0015]為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0016]圖1是本發(fā)明實(shí)施例提供的一種單元測(cè)試方法的流程示意圖;
[0017]圖2是本發(fā)明實(shí)施例提供的一種可選的效果示意圖;
[0018]圖3是本發(fā)明實(shí)施例提供的另一種單元測(cè)試方法的流程示意圖;
[0019]圖4是本發(fā)明實(shí)施例提供的一種單元測(cè)試裝置的結(jié)構(gòu)示意圖;
[0020]圖5是本發(fā)明實(shí)施例提供的另一種單元測(cè)試裝置的結(jié)構(gòu)示意圖;
[0021]圖6是本發(fā)明實(shí)施例提供的另一種單元測(cè)試裝置的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0022]下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0023]本發(fā)明實(shí)施例中,被測(cè)單元可以是任何程序、函數(shù)、過(guò)程、類、窗口等可測(cè)試單元程序。
[0024]請(qǐng)參閱圖1,圖1是本發(fā)明實(shí)施例提供的一種單元測(cè)試方法的流程示意圖,如圖1所示,包括以下步驟:
[0025]S101、對(duì)用于進(jìn)行單元測(cè)試的測(cè)試數(shù)據(jù)庫(kù)的API進(jìn)行模擬mock,以得到mock API。
[0026]可選的,上述用于進(jìn)行單元測(cè)試的測(cè)試數(shù)據(jù)庫(kù)可以是需要在本地安裝和部署才可以使用的數(shù)據(jù)庫(kù),例如:mysql數(shù)據(jù)庫(kù)和redis數(shù)據(jù)庫(kù)等。另外,上述被mock的API可以是測(cè)試數(shù)據(jù)庫(kù)中的一部分或者全部的API,例如:可以選擇被測(cè)試數(shù)據(jù)庫(kù)一些常用的API進(jìn)行
mocko
[0027]需要說(shuō)明的是,上述mock API的屬性和功能與測(cè)試數(shù)據(jù)庫(kù)中的API可以相同。這樣可以實(shí)現(xiàn)采用嵌入式關(guān)系型數(shù)據(jù)庫(kù)進(jìn)行單元測(cè)試與采用測(cè)試數(shù)據(jù)庫(kù)進(jìn)行單元測(cè)試的效果一樣。
[0028]S102、生成包括所述mock API的嵌入式關(guān)系型數(shù)據(jù)庫(kù)。
[0029]可選的,上述嵌入式關(guān)系型數(shù)據(jù)庫(kù)可以是H2數(shù)據(jù)庫(kù)。
[0030]S103、當(dāng)需要對(duì)被測(cè)單元進(jìn)行單元測(cè)試時(shí),采用所述嵌入式關(guān)系型數(shù)據(jù)庫(kù)包括的所述mock API對(duì)所述被測(cè)單元進(jìn)行單元測(cè)試。
[0031]可選的,上述采用所述嵌入式關(guān)系型數(shù)據(jù)庫(kù)包括的所述mock API對(duì)所述被測(cè)單元進(jìn)行單元測(cè)試可以是,將被測(cè)單元需要測(cè)試的數(shù)據(jù)插入到嵌入式關(guān)系型數(shù)據(jù)庫(kù)包括的與該被測(cè)單元對(duì)應(yīng)的mock API,嵌入式關(guān)系型數(shù)據(jù)庫(kù)再返回相應(yīng)地測(cè)試結(jié)果,以確認(rèn)被測(cè)單元是否存在錯(cuò)誤或者異常。
[0032]通過(guò)上述步驟可以實(shí)現(xiàn)采用嵌入式關(guān)系型數(shù)據(jù)庫(kù)包括的mock API進(jìn)行單元測(cè)試,由于嵌入式關(guān)系型數(shù)據(jù)庫(kù)不需要裝置和部署,且嵌入式關(guān)系型數(shù)據(jù)庫(kù)可以采用JAVA語(yǔ)言進(jìn)行編寫,以實(shí)現(xiàn)一種低成本技術(shù)模擬一種高成本技術(shù)實(shí)現(xiàn)相同的單元測(cè)試,從而可以降低單元測(cè)試的成本。另外,由于在單元測(cè)試過(guò)程中不需要安裝測(cè)試數(shù)據(jù)庫(kù),這樣可以實(shí)現(xiàn)被測(cè)單元與嵌入式關(guān)系型數(shù)據(jù)庫(kù)同在一個(gè)沙箱里進(jìn)行單元測(cè)試,例如:以測(cè)試數(shù)據(jù)庫(kù)包括mysql數(shù)據(jù)庫(kù)和redis數(shù)據(jù)庫(kù)為例,可以實(shí)現(xiàn)如圖2所示的隔離效果,完全隔離了測(cè)試數(shù)據(jù)庫(kù),即不需要安裝測(cè)試數(shù)據(jù)庫(kù),以簡(jiǎn)化測(cè)試流程,而且還可以保證程序功能的完整性。
[0033]可選的,上述方法可以應(yīng)用于任何智能設(shè)備,例如:服務(wù)器、平板電腦、手機(jī)、電子閱讀器、遙控器、個(gè)人計(jì)算機(jī)(Personal Computer, PC)、筆記本電腦、車載設(shè)備、網(wǎng)絡(luò)電視、可穿戴設(shè)備等智能設(shè)備。
[0034]本實(shí)施例中,對(duì)用于進(jìn)行單元測(cè)試的測(cè)試數(shù)據(jù)庫(kù)的應(yīng)用程序編程接口 API進(jìn)行模擬mock,以得到mock API ;生成包括所述mock API的嵌入式關(guān)系型數(shù)據(jù)庫(kù);當(dāng)需要對(duì)被測(cè)單元進(jìn)行單元測(cè)試時(shí),采用所述嵌入式關(guān)系型數(shù)據(jù)庫(kù)包括的所述mock API對(duì)所述被測(cè)單元進(jìn)行單元測(cè)試。由于嵌入式關(guān)系型數(shù)據(jù)庫(kù)是不需要安裝和部署的,相比現(xiàn)在技術(shù)需要安裝多個(gè)測(cè)試數(shù)據(jù)庫(kù),本發(fā)明可以降低單元測(cè)試的成本。
[0035]請(qǐng)參閱圖3,圖3是本發(fā)明實(shí)施例提供的另一種單元測(cè)試方法的流程示意圖,如圖3所示,包括以下步驟:
[0036]S301、對(duì)用于進(jìn)行單元測(cè)試的測(cè)試數(shù)據(jù)庫(kù)的應(yīng)用程序編程接口 API進(jìn)行模擬mock,以得到 mock API。
[0037]可選的,上述測(cè)試數(shù)據(jù)庫(kù)可以包括非關(guān)系型數(shù)據(jù)庫(kù),例如:redis數(shù)據(jù)庫(kù),這樣步驟S301可以包括:
[0038]將所述非關(guān)系型數(shù)據(jù)庫(kù)中的API的預(yù)設(shè)基本命令轉(zhuǎn)換成所述嵌入式關(guān)系型數(shù)據(jù)庫(kù)中的基本命令,以得到mock API。
[0039]其中,上述預(yù)設(shè)基本命令可以是非關(guān)系型數(shù)據(jù)庫(kù)中常用的基本命令,例如:set命令和get命令,這樣通過(guò)步驟S301就可以將非關(guān)系型數(shù)據(jù)庫(kù)中的set命令和get命令轉(zhuǎn)換為嵌入式關(guān)系型數(shù)據(jù)庫(kù)中的新增(例如:insert)命令和讀取(例如:select)命令。當(dāng)然,本實(shí)施例中還可以是將非關(guān)系型數(shù)據(jù)庫(kù)中的API的所有基本命令都轉(zhuǎn)換為嵌入式關(guān)系型數(shù)據(jù)庫(kù)中的基本命令。轉(zhuǎn)換后的命令就得到了上述mock API,即該mock API包含轉(zhuǎn)換后的命令。
[0040]可選的,上述測(cè)試數(shù)據(jù)庫(kù)可以包括關(guān)系型數(shù)據(jù)庫(kù),例如:mySql數(shù)據(jù)庫(kù),這樣步驟S301進(jìn)一步驟還可以包括:
[0041]將所述關(guān)系型數(shù)據(jù)庫(kù)中的API進(jìn)行模擬mock,以得到mock API。
[0042]由于上述嵌入式關(guān)系型數(shù)據(jù)庫(kù),例如:H2數(shù)據(jù)庫(kù)也是關(guān)系型數(shù)據(jù)庫(kù),這樣這兩種數(shù)據(jù)庫(kù)的API是兼容的,從而可以直接將關(guān)系型數(shù)據(jù)庫(kù)中的API進(jìn)行模擬mock,以得到上述mock API,即得到上述嵌入式關(guān)系型數(shù)據(jù)庫(kù)中的API。這樣在單元測(cè)試時(shí),可以直接將被測(cè)單元的數(shù)據(jù)插入至上述嵌入式關(guān)系型數(shù)據(jù)庫(kù)中的API,以完成單元測(cè)試。另外,還可以將關(guān)系型數(shù)據(jù)庫(kù)中的新增(例如:insert)、修改(例如:modify)和刪除(例如:delete)命令mock至嵌入式關(guān)系型數(shù)據(jù)庫(kù)。這樣可以實(shí)現(xiàn)原來(lái)對(duì)關(guān)系型數(shù)據(jù)庫(kù)的操作都轉(zhuǎn)移至嵌入式關(guān)系型數(shù)據(jù)庫(kù)中執(zhí)行。
[0043]S302、生成包括所述mock API的嵌入式關(guān)系型數(shù)據(jù)庫(kù)。
[0044]可選的,步驟S302可以包括:
[0045]通過(guò)注射(inject)技術(shù)和開(kāi)源框架(spring)技術(shù)生成包括所述mock API的嵌入式關(guān)系型數(shù)據(jù)庫(kù)。
[0046]其中,上述inject技術(shù)可以是谷歌(google) inject技術(shù),這樣可以實(shí)現(xiàn)通過(guò)采用這兩項(xiàng)技術(shù)生成上述嵌入式關(guān)系型數(shù)據(jù)庫(kù)。
[0047]通過(guò)步驟S302就可以實(shí)現(xiàn)將上述嵌入式關(guān)系型數(shù)據(jù)庫(kù)替代上述測(cè)試數(shù)據(jù)庫(kù),以使用嵌入式關(guān)系型數(shù)據(jù)庫(kù)進(jìn)行單元測(cè)試。
[0048]S303、當(dāng)需要對(duì)被測(cè)單元進(jìn)行單元測(cè)試時(shí),采用所述嵌入式關(guān)系型數(shù)據(jù)庫(kù)包括的所述mock API對(duì)所述被測(cè)單元進(jìn)行單元測(cè)試。
[0049]S304、清除所述嵌入式關(guān)系型數(shù)據(jù)庫(kù)中測(cè)試數(shù)據(jù),其中,所述測(cè)試數(shù)據(jù)為對(duì)所述被測(cè)試單元進(jìn)行測(cè)試所產(chǎn)生的數(shù)據(jù)。
[0050]可選的,上述嵌入式關(guān)系型數(shù)據(jù)庫(kù)可以實(shí)現(xiàn)對(duì)多個(gè)被測(cè)單元進(jìn)行測(cè)試,每個(gè)被測(cè)單元的單元測(cè)試都是分開(kāi)的,即每個(gè)被測(cè)單元的單元測(cè)試只占用嵌入式關(guān)系型數(shù)據(jù)庫(kù)的一部分?jǐn)?shù)據(jù)或者API,多個(gè)單元測(cè)試是相互隔離的,做得互不影響,且通過(guò)步驟S304就可以將進(jìn)行單元測(cè)試時(shí)產(chǎn)生的數(shù)據(jù)清除,從而可以實(shí)現(xiàn)單元測(cè)試的事務(wù)隔離,以及避免內(nèi)存數(shù)據(jù)過(guò)多給設(shè)備造成過(guò)多的功耗損失。例如:假設(shè)同一類有兩個(gè)方法都要測(cè)試銀行轉(zhuǎn)賬功能,且兩個(gè)方法都是對(duì)同一賬號(hào)進(jìn)行測(cè)試,其中方法I賬號(hào)的余額10,該賬號(hào)接收銀行轉(zhuǎn)賬10,則賬號(hào)的余額是20元;如果方法2賬號(hào)的余額是10元,接收銀行轉(zhuǎn)賬10元,則余額也是20元,因?yàn)閱卧獪y(cè)試都是分開(kāi)的,所有方法2轉(zhuǎn)賬后,該賬號(hào)的余額還是20元。
[0051]本實(shí)施例,在圖1所示的實(shí)施例的基礎(chǔ)上增加了多種可選的實(shí)施方式,且都可以實(shí)現(xiàn)降低單元測(cè)試的成本。另外,本實(shí)施例中的實(shí)施方式都可以應(yīng)用于圖1所示的實(shí)施例中。
[0052]下面為本發(fā)明裝置實(shí)施例,本發(fā)明裝置實(shí)施例用于執(zhí)行本發(fā)明方法實(shí)施例一至二實(shí)現(xiàn)的方法,為了便于說(shuō)明,僅示出了與本發(fā)明實(shí)施例相關(guān)的部分,具體技術(shù)細(xì)節(jié)未揭示的,請(qǐng)參照本發(fā)明實(shí)施例一和實(shí)施例二。
[0053]請(qǐng)參閱圖4,圖4是本發(fā)明實(shí)施例提供的一種單元測(cè)試裝置的結(jié)構(gòu)示意圖,如圖4所示,包括:模擬單元41、生成單元424和測(cè)試單元43,其中:
[0054]模擬單元41,用于對(duì)用于進(jìn)行單元測(cè)試的測(cè)試數(shù)據(jù)庫(kù)的應(yīng)用程序編程接口 API進(jìn)行模擬mock,以得到mock API。
[0055]可選的,上述用于進(jìn)行單元測(cè)試的測(cè)試數(shù)據(jù)庫(kù)可以是需要在本地安裝和部署才可以使用的數(shù)據(jù)庫(kù),例如:mysql數(shù)據(jù)庫(kù)和redis數(shù)據(jù)庫(kù)等。另外,上述被mock的API可以是測(cè)試數(shù)據(jù)庫(kù)中的一部分或者全部的API,例如:可以選擇被測(cè)試數(shù)據(jù)庫(kù)一些常用的API進(jìn)行
mocko
[0056]生成單元42,用于生成包括所述mock API的嵌入式關(guān)系型數(shù)據(jù)庫(kù)。
[0057]可選的,上述嵌入式關(guān)系型數(shù)據(jù)庫(kù)可以是H2數(shù)據(jù)庫(kù)。
[0058]測(cè)試單元43,用于當(dāng)需要對(duì)被測(cè)單元進(jìn)行單元測(cè)試時(shí),采用所述嵌入式關(guān)系型數(shù)據(jù)庫(kù)包括的所述mock API對(duì)所述被測(cè)單元進(jìn)行單元測(cè)試。
[0059]可選的,上述采用所述嵌入式關(guān)系型數(shù)據(jù)庫(kù)包括的所述mock API對(duì)所述被測(cè)單元進(jìn)行單元測(cè)試可以是,將被測(cè)單元需要測(cè)試的數(shù)據(jù)插入到嵌入式關(guān)系型數(shù)據(jù)庫(kù)包括的與該被測(cè)單元對(duì)應(yīng)的mock API,嵌入式關(guān)系型數(shù)據(jù)庫(kù)再返回相應(yīng)地測(cè)試結(jié)果,以確認(rèn)被測(cè)單元是否存在錯(cuò)誤或者異常。
[0060]本實(shí)施例中,對(duì)用于進(jìn)行單元測(cè)試的測(cè)試數(shù)據(jù)庫(kù)的應(yīng)用程序編程接口 API進(jìn)行模擬mock,以得到mock API ;生成包括所述mock API的嵌入式關(guān)系型數(shù)據(jù)庫(kù);當(dāng)需要對(duì)被測(cè)單元進(jìn)行單元測(cè)試時(shí),采用所述嵌入式關(guān)系型數(shù)據(jù)庫(kù)包括的所述mock API對(duì)所述被測(cè)單元進(jìn)行單元測(cè)試。由于嵌入式關(guān)系型數(shù)據(jù)庫(kù)是不需要安裝和部署的,相比現(xiàn)在技術(shù)需要安裝多個(gè)測(cè)試數(shù)據(jù)庫(kù),本發(fā)明可以降低單元測(cè)試的成本。
[0061]請(qǐng)參閱圖5,圖5是本發(fā)明實(shí)施例提供的另一種單元測(cè)試裝置的結(jié)構(gòu)示意圖,如圖5所示,包括:模擬單元51、生成單元52、測(cè)試單元53和清除單元54,其中:
[0062]模擬單元51,用于對(duì)用于進(jìn)行單元測(cè)試的測(cè)試數(shù)據(jù)庫(kù)的應(yīng)用程序編程接口 API進(jìn)行模擬mock,以得到mock API。
[0063]可選的,上述測(cè)試數(shù)據(jù)庫(kù)可以包括非關(guān)系型數(shù)據(jù)庫(kù),例如:redis數(shù)據(jù)庫(kù),模擬單元51可以用于將所述非關(guān)系型數(shù)據(jù)庫(kù)中的API的預(yù)設(shè)基本命令轉(zhuǎn)換成所述嵌入式關(guān)系型數(shù)據(jù)庫(kù)中的基本命令,以得到mock API。
[0064]其中,上述預(yù)設(shè)基本命令可以是非關(guān)系型數(shù)據(jù)庫(kù)中常用的基本命令,例如:set命令和get命令,這樣通過(guò)步驟S301就可以將非關(guān)系型數(shù)據(jù)庫(kù)中的set命令和get命令轉(zhuǎn)換為嵌入式關(guān)系型數(shù)據(jù)庫(kù)中的新增(例如:insert)命令和讀取(例如:select)命令。當(dāng)然,本實(shí)施例中還可以是將非關(guān)系型數(shù)據(jù)庫(kù)中的API的所有基本命令都轉(zhuǎn)換為嵌入式關(guān)系型數(shù)據(jù)庫(kù)中的基本命令。轉(zhuǎn)換后的命令就得到了上述mock API,即該mock API包含轉(zhuǎn)換后的命令。
[0065]可選的,上述測(cè)試數(shù)據(jù)庫(kù)可以包括關(guān)系型數(shù)據(jù)庫(kù),例如:mySql數(shù)據(jù)庫(kù),這樣模擬單元51進(jìn)一步還可以用于將所述關(guān)系型數(shù)據(jù)庫(kù)中的API進(jìn)行模擬mock,以得到mock API。
[0066]由于上述嵌入式關(guān)系型數(shù)據(jù)庫(kù),例如:H2數(shù)據(jù)庫(kù)也是關(guān)系型數(shù)據(jù)庫(kù),這樣這兩種數(shù)據(jù)庫(kù)的API是兼容的,從而可以直接將關(guān)系型數(shù)據(jù)庫(kù)中的API進(jìn)行模擬mock,以得到上述mock API,即得到上述嵌入式關(guān)系型數(shù)據(jù)庫(kù)中的API。這樣在單元測(cè)試時(shí),可以直接將被測(cè)單元的數(shù)據(jù)插入至上述嵌入式關(guān)系型數(shù)據(jù)庫(kù)中的API,以完成單元測(cè)試。另外,還可以將關(guān)系型數(shù)據(jù)庫(kù)中的新增(例如:insert)、修改(例如:modify)和刪除(例如:delete)命令mock至嵌入式關(guān)系型數(shù)據(jù)庫(kù)。這樣可以實(shí)現(xiàn)原來(lái)對(duì)關(guān)系型數(shù)據(jù)庫(kù)的操作都轉(zhuǎn)移至嵌入式關(guān)系型數(shù)據(jù)庫(kù)中執(zhí)行。
[0067]生成單元52,用于生成包括所述mock API的嵌入式關(guān)系型數(shù)據(jù)庫(kù)。
[0068]可選的,生成單元52可以用于通過(guò)注射(inject)技術(shù)和開(kāi)源框架(spring)技術(shù)生成包括所述mock API的嵌入式關(guān)系型數(shù)據(jù)庫(kù)。
[0069]其中,上述inject技術(shù)可以是谷歌(google) inject技術(shù),這樣可以實(shí)現(xiàn)通過(guò)采用這兩項(xiàng)技術(shù)生成上述嵌入式關(guān)系型數(shù)據(jù)庫(kù)。
[0070]測(cè)試單元53,用于當(dāng)需要對(duì)被測(cè)單元進(jìn)行單元測(cè)試時(shí),采用所述嵌入式關(guān)系型數(shù)據(jù)庫(kù)包括的所述mock API對(duì)所述被測(cè)單元進(jìn)行單元測(cè)試。
[0071]清除單元54,用于清除所述嵌入式關(guān)系型數(shù)據(jù)庫(kù)中測(cè)試數(shù)據(jù),其中,所述測(cè)試數(shù)據(jù)為對(duì)所述被測(cè)試單元進(jìn)行測(cè)試所產(chǎn)生的數(shù)據(jù)。
[0072]可選的,上述嵌入式關(guān)系型數(shù)據(jù)庫(kù)可以實(shí)現(xiàn)對(duì)多個(gè)被測(cè)單元進(jìn)行測(cè)試,每個(gè)被測(cè)單元的單元測(cè)試都是分開(kāi)的,即每個(gè)被測(cè)單元的單元測(cè)試只占用嵌入式關(guān)系型數(shù)據(jù)庫(kù)的一部分?jǐn)?shù)據(jù)或者API,多個(gè)單元測(cè)試是相互隔離的,做得互不影響,且通過(guò)清除單元54就可以將進(jìn)行單元測(cè)試時(shí)產(chǎn)生的數(shù)據(jù)清除,從而可以實(shí)現(xiàn)單元測(cè)試的事務(wù)隔離,以及避免內(nèi)存數(shù)據(jù)過(guò)多給設(shè)備造成過(guò)多的功耗損失。例如:假設(shè)同一類有兩個(gè)方法都要測(cè)試銀行轉(zhuǎn)賬功能,且兩個(gè)方法都是對(duì)同一賬號(hào)進(jìn)行測(cè)試,其中方法I賬號(hào)的余額10,該賬號(hào)接收銀行轉(zhuǎn)賬10,則賬號(hào)的余額是20元;如果方法2賬號(hào)的余額是10元,接收銀行轉(zhuǎn)賬10元,則余額也是20元,因?yàn)閱卧獪y(cè)試都是分開(kāi)的,所有方法2轉(zhuǎn)賬后,該賬號(hào)的余額還是20元。
[0073]本實(shí)施例,在圖4所示的實(shí)施例的基礎(chǔ)上增加了多種可選的實(shí)施方式,且都可以實(shí)現(xiàn)降低單元測(cè)試的成本。另外,本實(shí)施例中的實(shí)施方式都可以應(yīng)用于圖4所示的實(shí)施例中。
[0074]請(qǐng)參見(jiàn)圖6,圖6是本發(fā)明實(shí)施例提供的另一種單元測(cè)試裝置的結(jié)構(gòu)示意圖。如圖6所示,所述裝置I可以包括:至少一個(gè)處理器1001,例如CPU,至少一個(gè)網(wǎng)絡(luò)接口 1004,用戶接口 1003,存儲(chǔ)器1005,至少一個(gè)通信總線1002。其中,通信總線1002用于實(shí)現(xiàn)這些組件之間的連接通信。其中,用戶接口 1003可以包括顯示屏(Display)、鍵盤(Keyboard),可選用戶接口 1003還可以包括標(biāo)準(zhǔn)的有線接口、無(wú)線接口。網(wǎng)絡(luò)接口 1004可選的可以包括標(biāo)準(zhǔn)的有線接口、無(wú)線接口。存儲(chǔ)器1005可以是高速RAM存儲(chǔ)器,也可以是非不穩(wěn)定的存儲(chǔ)器(non-volatile memory),例如至少一個(gè)磁盤存儲(chǔ)器。存儲(chǔ)器1005可選的還可以是至少一個(gè)位于遠(yuǎn)離前述處理器1001的存儲(chǔ)裝置。如圖6所示,作為一種計(jì)算機(jī)存儲(chǔ)介質(zhì)的存儲(chǔ)器1005中可以包括操作系統(tǒng)、網(wǎng)絡(luò)通信模塊、用戶接口模塊以及設(shè)備控制應(yīng)用程序。
[0075]在圖6所示的裝置I中,處理器1001可以用于調(diào)用存儲(chǔ)器1005中存儲(chǔ)的設(shè)備控制應(yīng)用程序,以實(shí)現(xiàn)
[0076]對(duì)用于進(jìn)行單元測(cè)試的測(cè)試數(shù)據(jù)庫(kù)的應(yīng)用程序編程接口 API進(jìn)行模擬mock,以得到 mock API ;
[0077]生成包括所述mock API的嵌入式關(guān)系型數(shù)據(jù)庫(kù);
[0078]當(dāng)需要對(duì)被測(cè)單元進(jìn)行單元測(cè)試時(shí),采用所述嵌入式關(guān)系型數(shù)據(jù)庫(kù)包括的所述mock API對(duì)所述被測(cè)單元進(jìn)行單元測(cè)試。
[0079]可選的,所述測(cè)試數(shù)據(jù)庫(kù)至少包括非關(guān)系型數(shù)據(jù)庫(kù);所述處理器1001在執(zhí)行所述對(duì)用于進(jìn)行單元測(cè)試的測(cè)試數(shù)據(jù)庫(kù)的API進(jìn)行模擬mock,以得到mockAPI時(shí),具體可以用于:
[0080]將所述非關(guān)系型數(shù)據(jù)庫(kù)中的API的預(yù)設(shè)基本命令轉(zhuǎn)換成所述嵌入式關(guān)系型數(shù)據(jù)庫(kù)中的基本命令,以得到mock API。
[0081]可選的,所述測(cè)試數(shù)據(jù)庫(kù)進(jìn)一步包括關(guān)系型數(shù)據(jù)庫(kù);所述處理器1001在執(zhí)行所述對(duì)用于進(jìn)行單元測(cè)試的測(cè)試數(shù)據(jù)庫(kù)的API進(jìn)行模擬mock,以得到mockAPI時(shí),具體可以用于:
[0082]將所述關(guān)系型數(shù)據(jù)庫(kù)中的API進(jìn)行模擬mock,以得到mock API。
[0083]可選的,處理器1001在執(zhí)行所述生成包括所述mock API的嵌入式關(guān)系型數(shù)據(jù)庫(kù)時(shí),具體可以用于:
[0084]通過(guò)注射inject技術(shù)和開(kāi)源框架spring技術(shù)生成包括所述mock API的嵌入式關(guān)系型數(shù)據(jù)庫(kù)。
[0085]可選的,處理器1001具體還可以用于:
[0086]清除所述嵌入式關(guān)系型數(shù)據(jù)庫(kù)中測(cè)試數(shù)據(jù),其中,所述測(cè)試數(shù)據(jù)為對(duì)所述被測(cè)試單元進(jìn)行測(cè)試所產(chǎn)生的數(shù)據(jù)。
[0087]本實(shí)施例中,對(duì)用于進(jìn)行單元測(cè)試的測(cè)試數(shù)據(jù)庫(kù)的應(yīng)用程序編程接口 API進(jìn)行模擬mock,以得到mock API ;生成包括所述mock API的嵌入式關(guān)系型數(shù)據(jù)庫(kù);當(dāng)需要對(duì)被測(cè)單元進(jìn)行單元測(cè)試時(shí),采用所述嵌入式關(guān)系型數(shù)據(jù)庫(kù)包括的所述mock API對(duì)所述被測(cè)單元進(jìn)行單元測(cè)試。由于嵌入式關(guān)系型數(shù)據(jù)庫(kù)是不需要安裝和部署的,相比現(xiàn)在技術(shù)需要安裝多個(gè)測(cè)試數(shù)據(jù)庫(kù),本發(fā)明可以降低單元測(cè)試的成本。
[0088]本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分流程,是可以通過(guò)計(jì)算機(jī)程序來(lái)指令相關(guān)的硬件來(lái)完成,所述的程序可存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中,該程序在執(zhí)行時(shí),可包括如上述各方法的實(shí)施例的流程。其中,所述的存儲(chǔ)介質(zhì)可為磁碟、光盤、只讀存儲(chǔ)記憶體(Read-Only Memory, ROM)或隨機(jī)存取存儲(chǔ)器(Random AccessMemory,簡(jiǎn)稱 RAM)等。
[0089]以上所揭露的僅為本發(fā)明較佳實(shí)施例而已,當(dāng)然不能以此來(lái)限定本發(fā)明之權(quán)利范圍,因此依本發(fā)明權(quán)利要求所作的等同變化,仍屬本發(fā)明所涵蓋的范圍。
【權(quán)利要求】
1.一種單元測(cè)試方法,其特征在于,包括: 對(duì)用于進(jìn)行單元測(cè)試的測(cè)試數(shù)據(jù)庫(kù)的應(yīng)用程序編程接口 API進(jìn)行模擬mock,以得到mock API ; 生成包括所述mock API的嵌入式關(guān)系型數(shù)據(jù)庫(kù); 當(dāng)需要對(duì)被測(cè)單元進(jìn)行單元測(cè)試時(shí),采用所述嵌入式關(guān)系型數(shù)據(jù)庫(kù)包括的所述mockAPI對(duì)所述被測(cè)單元進(jìn)行單元測(cè)試。
2.如權(quán)利要求1所述的方法,其特征在于,所述測(cè)試數(shù)據(jù)庫(kù)至少包括非關(guān)系型數(shù)據(jù)庫(kù); 所述對(duì)用于進(jìn)行單元測(cè)試的測(cè)試數(shù)據(jù)庫(kù)的API進(jìn)行模擬mock,以得到mock API,包括: 將所述非關(guān)系型數(shù)據(jù)庫(kù)中的API的預(yù)設(shè)基本命令轉(zhuǎn)換成所述嵌入式關(guān)系型數(shù)據(jù)庫(kù)中的基本命令,以得到mock API。
3.如權(quán)利要求2所述的方法,其特征在于,所述測(cè)試數(shù)據(jù)庫(kù)進(jìn)一步包括關(guān)系型數(shù)據(jù)庫(kù); 所述對(duì)用于進(jìn)行單元測(cè)試的測(cè)試數(shù)據(jù)庫(kù)的API進(jìn)行模擬mock,以得到mock API進(jìn)一步還包括: 將所述關(guān)系型數(shù)據(jù)庫(kù)中的API進(jìn)行模擬mock,以得到mock API。
4.如權(quán)利要求1-3中任一項(xiàng)所述的方法,其特征在于,所述生成包括所述mockAPI的嵌入式關(guān)系型數(shù)據(jù)庫(kù),包括: 通過(guò)注射inject技術(shù)和開(kāi)源框架spring技術(shù)生成包括所述mock API的嵌入式關(guān)系型數(shù)據(jù)庫(kù)。
5.如權(quán)利要求1-3中任一項(xiàng)所述的方法,其特征在于,所述采用所述嵌入式關(guān)系型數(shù)據(jù)庫(kù)包括的所述mock API對(duì)所述被測(cè)單元進(jìn)行單元測(cè)試之后,所述方法還包括: 清除所述嵌入式關(guān)系型數(shù)據(jù)庫(kù)中測(cè)試數(shù)據(jù),其中,所述測(cè)試數(shù)據(jù)為對(duì)所述被測(cè)試單元進(jìn)行測(cè)試所產(chǎn)生的數(shù)據(jù)。
6.一種單元測(cè)試裝置,其特征在于,包括:模擬單元、生成單元和測(cè)試單元,其中: 所述模擬單元,用于對(duì)用于進(jìn)行單元測(cè)試的測(cè)試數(shù)據(jù)庫(kù)的應(yīng)用程序編程接口 API進(jìn)行模擬mock,以得到mock API ; 所述生成單元,用于生成包括所述mock API的嵌入式關(guān)系型數(shù)據(jù)庫(kù); 所述測(cè)試單元,用于當(dāng)需要對(duì)被測(cè)單元進(jìn)行單元測(cè)試時(shí),采用所述嵌入式關(guān)系型數(shù)據(jù)庫(kù)包括的所述mock API對(duì)所述被測(cè)單元進(jìn)行單元測(cè)試。
7.如權(quán)利要求6所述的裝置,其特征在于,所述測(cè)試數(shù)據(jù)庫(kù)至少包括非關(guān)系型數(shù)據(jù)庫(kù); 所述模擬單元用于將所述非關(guān)系型數(shù)據(jù)庫(kù)中的API的預(yù)設(shè)基本命令轉(zhuǎn)換成所述嵌入式關(guān)系型數(shù)據(jù)庫(kù)中的基本命令,以得到mock API。
8.如權(quán)利要求7所述的裝置,其特征在于,所述測(cè)試數(shù)據(jù)庫(kù)進(jìn)一步包括關(guān)系型數(shù)據(jù)庫(kù); 所述模擬單元進(jìn)一步還用于將所述關(guān)系型數(shù)據(jù)庫(kù)中的API進(jìn)行模擬mock,以得到mockAPI。
9.如權(quán)利要求6-8中任一項(xiàng)所述的裝置,其特征在于,所述生成單元用于通過(guò)注射inject技術(shù)和開(kāi)源框架spring技術(shù)生成包括所述mock API的嵌入式關(guān)系型數(shù)據(jù)庫(kù)。
10.如權(quán)利要求6-8中任一項(xiàng)所述的裝置,其特征在于,所述裝置還包括: 清除單元,用于清除所述嵌入式關(guān)系型數(shù)據(jù)庫(kù)中測(cè)試數(shù)據(jù),其中,所述測(cè)試數(shù)據(jù)為對(duì)所述被測(cè)試單元進(jìn)行測(cè)試所產(chǎn)生的數(shù)據(jù)。
【文檔編號(hào)】G06F17/30GK104375933SQ201410479968
【公開(kāi)日】2015年2月25日 申請(qǐng)日期:2014年9月18日 優(yōu)先權(quán)日:2014年9月18日
【發(fā)明者】譚海潮, 盧軒華 申請(qǐng)人:廣州華多網(wǎng)絡(luò)科技有限公司