一種適用于osgi的檢測框架的制作方法
【專利摘要】本發(fā)明提供了一種適用于OSGI的檢測框架,該框架在OSGI環(huán)境中運(yùn)行基本的Junit單元檢測,建立單獨(dú)的檢測模塊,把業(yè)務(wù)邏輯代碼和檢測代碼完全分離,為后續(xù)項(xiàng)目構(gòu)建和集成提供前提便利條件,檢測運(yùn)行環(huán)境收集所有檢測模塊里的檢測用例,以集合的形式,對所有的檢測用例進(jìn)行匯總,方便檢測的整體運(yùn)行。
【專利說明】—種適用于OSGI的檢測框架
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種軟件構(gòu)件化設(shè)備,具體涉及一種適用于OSGI的檢測框架。
【背景技術(shù)】
[0002]OSGI (Open Service Gateway Initiative)技術(shù)是面向 Java 的動態(tài)模型系統(tǒng),OSGi的主要職責(zé)是讓開發(fā)者能夠構(gòu)建動態(tài)化、模塊化的Java系統(tǒng)。使用OSGi后,應(yīng)用的過程就像搭積木一樣搭建,例如,對于一個正在運(yùn)行的系統(tǒng),其中一個模塊要使用日志服務(wù),但是目前的系統(tǒng)并沒有提供日志服務(wù)的模塊,此時(shí)可以直接從網(wǎng)上下載實(shí)現(xiàn)日志服務(wù)API的模塊,然后動態(tài)安裝此模塊,隨后其他要使用日志服務(wù)的模塊就可以使用了。
[0003]在OSGi環(huán)境里,針對業(yè)務(wù)邏輯模塊,編寫專門的檢測模塊,這樣可以做到檢測代碼和業(yè)務(wù)邏輯代碼完全分離。提供包含Junit檢測框架的檢測環(huán)境模塊收集各個檢測模塊的檢測用例,并且為檢測模塊提供Junit運(yùn)行環(huán)境支持。
[0004]OSGi框架中每一個模塊都是一個Bundle,Bundle從形式上講是在META-1NF目錄下的MANIFEST.MF文件中加入了 OSGi特定描述的一個jar包。Bundle的生命周期被OSGi
框架管理。
[0005]目前業(yè)界廣泛應(yīng)用的OSGi運(yùn)行框架,被稱為Java語言的動態(tài)模塊系統(tǒng)。它為模塊化應(yīng)用的開發(fā)定義了一個基礎(chǔ)架構(gòu),它使用Bundle的概念把復(fù)雜的應(yīng)用程序模塊化。Bundle的生命周期由OSGi運(yùn)行框架維護(hù),并且Bundle之間是相互依賴的,這也決定了加載Bundle時(shí)的順序。在帶來松耦合互相依賴的同時(shí),也產(chǎn)生了嚴(yán)格的訪問控制,只有少數(shù)的接口能夠被其他Bundle訪問到,傳統(tǒng)的單元檢測無法在OSGi環(huán)境里運(yùn)行。在檢測中,經(jīng)常需要對Bundle中非公開的包或方法進(jìn)行檢測。并且檢測代碼如何與業(yè)務(wù)邏輯代碼分開也存在問題。
[0006]OSGi運(yùn)行環(huán)境經(jīng)常是由十幾個或者幾十個Bundle組成,如果針對每一個Bundle都寫好檢測代碼,那么單獨(dú)運(yùn)行每一個檢測用例也很麻煩,需要手動去執(zhí)行每一個TestCase0如何把所有的檢測用戶匯總在一個專門的檢測Bundle里面,能夠一次性運(yùn)行所有的檢測,也是面臨的一個問題。
[0007]所以需要針對OSGi特點(diǎn),提供一種單元檢測框架,該框架可以在OSGi環(huán)境中運(yùn)行基本的Junit單元檢測,把業(yè)務(wù)邏輯代碼和檢測代碼完全分離,并且通過專門的檢測運(yùn)行環(huán)境對所有的檢測用例進(jìn)行匯總,方便檢測的整體運(yùn)行。
【發(fā)明內(nèi)容】
[0008]為了克服上述現(xiàn)有技術(shù)的不足,本發(fā)明提供一種適用于OSGI的檢測框架,該框架可以在OSGI環(huán)境中運(yùn)行基本的Junit單元檢測。建立單獨(dú)的檢測模塊,把業(yè)務(wù)邏輯代碼和檢測代碼完全分離,為后續(xù)項(xiàng)目構(gòu)建和集成提供前提便利條件。檢測運(yùn)行環(huán)境收集所有檢測模塊里的檢測用例,以集合的形式,對所有的檢測用例進(jìn)行匯總,方便檢測的整體運(yùn)行。
[0009]為了實(shí)現(xiàn)上述發(fā)明目的,本發(fā)明采取如下技術(shù)方案:
[0010]一種適用于OSGI的檢測框架,其包括多個業(yè)務(wù)模塊、多個檢測模塊和檢測運(yùn)行環(huán)境模塊。
[0011]本發(fā)明提供的優(yōu)選技術(shù)方案中,編寫業(yè)務(wù)模塊的元數(shù)據(jù)描述配置文件,將業(yè)務(wù)模塊中需要進(jìn)行檢測的接口以O(shè)Sgi服務(wù)的方式對外導(dǎo)出。
[0012]本發(fā)明提供的第二優(yōu)選技術(shù)方案中,所述檢測模塊分別引入OSgi服務(wù),并編寫檢測用例。
[0013]本發(fā)明提供的第三優(yōu)選技術(shù)方案中,所述檢測用例確保方法接收預(yù)期范圍內(nèi)的輸入,為每一次檢測輸入返回預(yù)期的輸出。
[0014]本發(fā)明提供的第四優(yōu)選技術(shù)方案中,每個檢測模塊中,都新建Junit檢測組件,運(yùn)行所述檢測模塊里所有的檢測用例,每一個檢測組件都聲明一個Spring Bean。
[0015]本發(fā)明提供的第五優(yōu)選技術(shù)方案中,在Spring配置文件里引入所述SpringBean,新建一個檢測集合組件,實(shí)例化檢測模塊中的檢測組件,遍歷和執(zhí)行所有的檢測用例。
[0016]本發(fā)明提供的第六優(yōu)選技術(shù)方案中,在寫檢測代碼的過程中,若會出現(xiàn)檢測業(yè)務(wù)模塊方法依賴的業(yè)務(wù)模塊沒有完成的情況,為了不影響本業(yè)務(wù)模塊的單元檢測和能夠和其他模塊隔離,使用Mock對象來模擬協(xié)同模塊預(yù)期的行為。
[0017]本發(fā)明提供的第七優(yōu)選技術(shù)方案中,所述多個業(yè)務(wù)模塊之間具有獨(dú)立和依賴兩種關(guān)系。
[0018]本發(fā)明提供的第八優(yōu)選技術(shù)方案中,所述檢測框架適用于OSGI環(huán)境與Maven持續(xù)集成環(huán)境結(jié)合在一起,進(jìn)行持續(xù)集成檢測。
[0019]與最接近的現(xiàn)有技術(shù)比,本發(fā)明的有益效果:
[0020]本發(fā)明提供的技術(shù)方案使用EasyMock來模擬其他模塊的功能,在明確的知道其他模塊接受的指令和返回的結(jié)果的情況下,通過這個方式可以實(shí)現(xiàn)對模塊之間邏輯調(diào)用的檢測。由于這種方法并沒有實(shí)際調(diào)用其他模塊,所以待依賴模塊開發(fā)完成之后,可以使用加載依賴Bean的方式對依賴的模塊功能進(jìn)行調(diào)用,實(shí)現(xiàn)模塊的單元檢測部分。
[0021]本發(fā)明提供的框架中結(jié)合Mock模擬的思想,可以將本模塊與其他依賴模塊完全分隔開,這樣檢測不受協(xié)同模塊開發(fā)進(jìn)度的影響;另一方面通過與Mock對象協(xié)作,可以獲得一個孤立的檢測環(huán)境。
【專利附圖】
【附圖說明】
[0022]圖1是框架的整體架構(gòu)設(shè)計(jì)圖
[0023]圖2是檢測方案的功能分布圖
【具體實(shí)施方式】
[0024]下面結(jié)合附圖對本發(fā)明作進(jìn)一步詳細(xì)說明。
[0025]假設(shè)現(xiàn)在運(yùn)行環(huán)境里包含兩個業(yè)務(wù)模塊:A和B,且A、B之間有依賴關(guān)系。檢測框架的具體設(shè)計(jì)如下:
[0026](I)、編輯兩個業(yè)務(wù)模塊的元數(shù)據(jù)描述配置文件,將兩個模塊中需要進(jìn)行檢測的接口以osgi服務(wù)的方式對外導(dǎo)出。
[0027]通過注冊osgi服務(wù),檢測模塊可以在OSGi容器里引用這些服務(wù)用來進(jìn)行單元檢測。
[0028](2)、新建檢測模塊=TestA和TestB,分別引入上一步中的osgi服務(wù),編寫檢測用例。
[0029]檢測用例確保方法接受預(yù)期范圍內(nèi)的輸入,并且為每一次檢測輸入返回預(yù)期的輸出。
[0030](3)、在檢測模塊里,新建Junit檢測組件(Test Suite),涵蓋檢測模塊里所有的檢測用例。
[0031]通過這樣的方式,為每一個模塊內(nèi)的檢測用例提供一個整體對外接口,這樣可以通過調(diào)用這個接口一次性運(yùn)行所有的檢測用例。每一個檢測組件都聲明成一個SpringBean0
[0032](4)、新建檢測環(huán)境模塊,在Spring配置文件里引入Spring Bean。新建一個檢測集合組件(Test Runner),通過實(shí)例化其他檢測模塊的檢測組件Bean,可以遍歷和執(zhí)行所有的檢測用例。
[0033]這里需要在OSGi環(huán)境里集成Spring環(huán)境,這樣才能正常定義和實(shí)例化Bean。在實(shí)例化Bean的過程中,可以使用Applicat1nContext通過ClassPathXmlApplicat1nContext讀取依賴的xml文件來實(shí)現(xiàn)。對于實(shí)例化過程中一些可以忽略的空指針問題,可以使用Mock來模擬預(yù)期行為。
[0034]通過類的名字和包名注冊Bean并發(fā)布為OSGi服務(wù)。在寫檢測代碼的過程中,可能會出現(xiàn)檢測方法依賴的模塊還沒有完成的情況,此時(shí)為了不影響本模塊的單元檢測,也為了能夠?qū)⒈灸K與其他模塊隔離,可以使用Mock對象來模擬協(xié)同模塊預(yù)期的行為。這樣做一是可以將本模塊與其他依賴模塊完全分隔開,這樣檢測不受協(xié)同模塊開發(fā)進(jìn)度的影響;另一方面通過與Mock對象協(xié)作,可以獲得一個孤立的檢測環(huán)境。此外,Mock對象還可以模擬在系統(tǒng)中不容易構(gòu)造和比較復(fù)雜的對象,節(jié)省檢測時(shí)間。
[0035]如圖2所示,檢測框架的具體實(shí)施方案有如下步驟:
[0036](I)、在檢測模塊TestAuthorizat1n里定義好檢測的接口方法,檢測接口定義如下:
[0037]Public void testGetAuthorizat1nByld(String id);
[0038]Authorizat1n定義用戶授權(quán)數(shù)據(jù)庫;
[0039]String id定義查詢數(shù)據(jù)庫的索引值;
[0040]上面的testGetAuthorizat1nByld接口用來檢測業(yè)務(wù)模塊對授權(quán)數(shù)據(jù)庫Authorizat1n的查詢過程。
[0041](2)、在檢測模塊里定義好檢測組件用來對外提供統(tǒng)一的檢測接口:
[0042]Public static Test suite (BundleContext be);
[0043]BundleContext be是OSGi運(yùn)行框架的容器環(huán)境;
[0044]Test返回檢測用例的匯總,通過定義JunitTestSuite類型的suite變量,添加檢測用例 suite.addTestSuite (TestAuthorizat1n.class)。
[0045](3)、檢測環(huán)境模塊整體運(yùn)行檢測,TestRunner運(yùn)行檢測的接口定義如下:
[0046]Public void runAllTests(Map<String, Test>testcases);
[0047]參數(shù)Map〈String, TestHestcases用來收集所有從實(shí)例化Bean中獲取的檢測組件,其中String字段是檢測組件的類名,Test字段是對應(yīng)的以注解OTest定義的Junit檢測方法。
[0048]獲取檢測用例集合的接口定義如下:
[0049]Public Map<String, Test>getTestCases();
[0050]其中實(shí)例化Bean通過繼承自BeanFactory接口的Applicat1nContext,使用其實(shí)現(xiàn)類ClassPathXmlApplicat1nContext,從類路徑中尋找指定的XML配置文件,找到并裝載完成Applicat1nContext的實(shí)例化工作。
[0051]為了運(yùn)行檢測用例,需要在本模塊里添加Junit運(yùn)行環(huán)境。目的除了要為檢測用例提供Junit檢測框架的支持,還可以接受其他檢測模塊注冊的檢測用例,并且能夠運(yùn)行這些檢測用例。
[0052]最后應(yīng)當(dāng)說明的是:以上實(shí)施例僅用以說明本發(fā)明的技術(shù)方案而非對其限制,盡管參照上述實(shí)施例對本發(fā)明進(jìn)行了詳細(xì)的說明,所屬領(lǐng)域的普通技術(shù)人員依然可以對本發(fā)明的【具體實(shí)施方式】進(jìn)行修改或者等同替換,這些未脫離本發(fā)明精神和范圍的任何修改或者等同替換,均在申請待批的本發(fā)明的權(quán)利要求保護(hù)范圍之內(nèi)。
【權(quán)利要求】
1.一種適用于OSGI的檢測框架,其特征在于,所述框架包括業(yè)務(wù)模塊、檢測模塊和檢測運(yùn)行環(huán)境模塊。
2.根據(jù)權(quán)利要求1所述檢測框架,其特征在于,編輯業(yè)務(wù)模塊的元數(shù)據(jù)描述配置文件,將業(yè)務(wù)模塊中需要進(jìn)行檢測的接口以osgi服務(wù)的方式對外導(dǎo)出。
3.根據(jù)權(quán)利要求1所述檢測框架,其特征在于,將所述檢測模塊引入osgi服務(wù),并在檢測模塊中編寫檢測用例。
4.根據(jù)權(quán)利要求3所述檢測框架,其特征在于,所述檢測用例確保方法接收預(yù)期范圍內(nèi)的輸入,為每一次檢測輸入返回預(yù)期的輸出。
5.根據(jù)權(quán)利要求1所述檢測框架,其特征在于,每個檢測模塊中新建Junit檢測組件,運(yùn)行所述檢測模塊里所有的檢測用例,每一個檢測組件都聲明一個Spring Bean。
6.根據(jù)權(quán)利要求5所述檢測框架,其特征在于,在Spring配置文件里引入所述SpringBean,新建一個檢測集合組件,實(shí)例化檢測模塊中的檢測組件,遍歷和執(zhí)行所有的檢測用例。
7.根據(jù)權(quán)利要求1所述檢測框架,其特征在于,在寫檢測代碼的過程中,若會出現(xiàn)檢測業(yè)務(wù)模塊方法依賴的業(yè)務(wù)模塊沒有完成的情況,為了不影響本業(yè)務(wù)模塊的單元檢測和能夠和其他模塊隔離,使用Mock對象來模擬協(xié)同模塊預(yù)期的行為。
8.根據(jù)權(quán)利要求1所述檢測框架,其特征在于,所述業(yè)務(wù)模塊之間具有獨(dú)立和依賴兩種關(guān)系。
9.根據(jù)權(quán)利要求1所述檢測框架,其特征在于,所述檢測框架適用于OSGI環(huán)境與Maven持續(xù)集成環(huán)境結(jié)合在一起,進(jìn)行持續(xù)集成檢測。
【文檔編號】G06F11/36GK104182346SQ201410438592
【公開日】2014年12月3日 申請日期:2014年8月29日 優(yōu)先權(quán)日:2014年8月29日
【發(fā)明者】郝秋影, 郭鵬, 李守超 申請人:曙光信息產(chǎn)業(yè)(北京)有限公司