專利名稱:通過(guò)屬性控制的測(cè)試實(shí)例繼承的制作方法
背景技術(shù):
測(cè)試自動(dòng)化系統(tǒng)用于自動(dòng)測(cè)試軟件驅(qū)動(dòng)的系統(tǒng)。常規(guī)的體系結(jié)構(gòu)使用了測(cè)試裝具模塊(test harness),它通常用于執(zhí)行測(cè)試實(shí)例,包括由屬性指定的測(cè)試實(shí)例。使用屬性的自動(dòng)化測(cè)試通常由具有若干方法的單個(gè)類構(gòu)成,這些方法由測(cè)試裝具模塊調(diào)用以實(shí)現(xiàn)該測(cè)試。依照常規(guī)體系結(jié)構(gòu)的測(cè)試不從其它類繼承測(cè)試方法,這阻止了公用基礎(chǔ)測(cè)試類的創(chuàng)建。
常規(guī)的測(cè)試裝具模塊檢查每一類和/或方法、檢查存在的屬性、然后基于屬性的檢查執(zhí)行行動(dòng)。使用屬性的方法要求執(zhí)行行動(dòng)所需的代碼在測(cè)試裝具模塊中存在。因此,不可能在不修改測(cè)試裝具模塊的情況下創(chuàng)建新類型的測(cè)試屬性。另外,通常需要對(duì)使用代碼的每一不同的測(cè)試裝具模塊書寫(或修改)相同的代碼。常規(guī)測(cè)試裝具模塊中的各種功能可導(dǎo)致測(cè)試裝具模塊之間的差異,使得測(cè)試可以在每一測(cè)試裝具模塊中不同地運(yùn)行(或測(cè)試僅在一個(gè)測(cè)試裝具模塊中正確地運(yùn)行),這是不合期望的。
依照本發(fā)明,屬性可被重復(fù)使用,而不需要修改來(lái)運(yùn)行使用不同的測(cè)試裝具模塊書寫的測(cè)試。
發(fā)明內(nèi)容
本發(fā)明針對(duì)的是一種可通過(guò)屬性來(lái)控制的測(cè)試實(shí)例繼承行為。從其導(dǎo)出測(cè)試對(duì)象的基礎(chǔ)測(cè)試類可用于減少測(cè)試實(shí)例代碼和管理。例如,基礎(chǔ)測(cè)試類及其導(dǎo)出的對(duì)象可用于實(shí)現(xiàn)在整個(gè)測(cè)試類集之間公用的步驟(如,啟動(dòng)要被測(cè)試的軟件片斷并令其進(jìn)入某一階段)。該基礎(chǔ)結(jié)構(gòu)的原理在例如基類被修改時(shí)簡(jiǎn)化了測(cè)試軟件的管理。當(dāng)基類被修改時(shí),從該基類導(dǎo)出的所有測(cè)試類被自動(dòng)修改。因此,當(dāng)改變對(duì)于修改(例如軟件啟動(dòng)方式)為必需時(shí),僅需要修改一個(gè)項(xiàng)(而非每一測(cè)試)。
依照本發(fā)明的一方面,一種具有計(jì)算機(jī)可執(zhí)行組件的計(jì)算機(jī)可讀介質(zhì)包括兩個(gè)組件。一種測(cè)試實(shí)例腳本對(duì)象包括被安排成測(cè)試電子系統(tǒng)的測(cè)試方法,其中,測(cè)試方法以包括基類和子類的分層結(jié)構(gòu)安排,其中,每一子類從基類導(dǎo)出,并且其中,依照分層結(jié)構(gòu)中的方法的排列,繼承的原理被應(yīng)用于每一測(cè)試方法。測(cè)試裝具模塊被安排成為測(cè)試方法提供系統(tǒng)測(cè)試服務(wù)。
依照本發(fā)明的另一方面,一種用于執(zhí)行測(cè)試組件的方法包括提供被安排成測(cè)試電子系統(tǒng)的測(cè)試方法。提供的測(cè)試方法以包括基類和子類的分層結(jié)構(gòu)安排,其中,每一子類由基類導(dǎo)出。依照分層結(jié)構(gòu)中方法的排列,繼承的原理被應(yīng)用于每一測(cè)試方法。一種測(cè)試裝具模塊被安排成為測(cè)試方法提供系統(tǒng)測(cè)試服務(wù)。
依照本發(fā)明的又一方面,一種用于自動(dòng)化測(cè)試的系統(tǒng)包括兩個(gè)組件。測(cè)試實(shí)例腳本對(duì)象包括被安排成測(cè)試自動(dòng)化系統(tǒng)的測(cè)試方法,其中,該測(cè)試方法以包括基類和子類的分層結(jié)構(gòu)排列,其中,每一子類從基類導(dǎo)出,并且其中,依照分層結(jié)構(gòu)內(nèi)方法的排列,繼承的原理被應(yīng)用于每一測(cè)試方法。測(cè)試裝具模塊被安排成為測(cè)試方法提供系統(tǒng)測(cè)試服務(wù)。
依照本發(fā)明的再一方面,一種用于自動(dòng)化測(cè)試的系統(tǒng)包括用于提供被安排成測(cè)試電子系統(tǒng)的測(cè)試方法的裝置;用于以包括基類和子類的分層結(jié)構(gòu)安排提供的測(cè)試方法的裝置,其中,每一子類從基類導(dǎo)出;用于依照分層結(jié)構(gòu)中的方法安排將繼承的原理應(yīng)用于每一測(cè)試方法的裝置;以及使用一測(cè)試裝具模塊裝置來(lái)為測(cè)試方法提供系統(tǒng)測(cè)試服務(wù)。
圖1示出了可在本發(fā)明的一個(gè)示例性實(shí)施例中使用的示例性計(jì)算裝置。
圖2所示是用于實(shí)施本發(fā)明的示例性環(huán)境的框圖。
圖3示出了依照本發(fā)明的各方面的執(zhí)行引擎的過(guò)程流300。
圖4是依照本發(fā)明的各方面的執(zhí)行引擎的過(guò)程流400的進(jìn)一步圖示。
具體實(shí)施例方式
貫穿說(shuō)明書和權(quán)利要求書,以下術(shù)語(yǔ)采用此處明確相關(guān)聯(lián)的意義,除非上下文明確地另外指明。此處所使用的術(shù)語(yǔ)和接口規(guī)范并非表示應(yīng)當(dāng)用來(lái)書寫特定對(duì)象或方法的特定語(yǔ)言。相反,使用這些術(shù)語(yǔ)和接口規(guī)范來(lái)描述接口或?qū)ο蟮墓δ芎蛢?nèi)容,如函數(shù)名、輸入、輸出、返回值、以及要使用接口來(lái)執(zhí)行什么操作(或要由對(duì)象執(zhí)行什么操作)。
說(shuō)明性操作環(huán)境參考圖1,用于實(shí)現(xiàn)本發(fā)明的一個(gè)示例性系統(tǒng)包括諸如計(jì)算裝置100的計(jì)算裝置。在十分基本的配置中,計(jì)算裝置100通常包括至少一個(gè)處理單元102和系統(tǒng)存儲(chǔ)器104。根據(jù)計(jì)算裝置的確切配置和類型,系統(tǒng)存儲(chǔ)器104可以是易失性(如RAM)、非易失性(如ROM、閃存等)或兩者的某一組合。系統(tǒng)存儲(chǔ)器104通常包括操作系統(tǒng)105、一個(gè)或多個(gè)應(yīng)用程序106,并且可包括程序數(shù)據(jù)107。在一個(gè)實(shí)施例中,應(yīng)用程序106包括文字處理應(yīng)用程序120,它進(jìn)一步包括ML編輯器122。這一基本配置在圖1中由虛線108內(nèi)的組件示出。
計(jì)算裝置100可具有另外的特征或功能。例如,計(jì)算裝置100也可包括另外的數(shù)據(jù)存儲(chǔ)設(shè)備(可移動(dòng)和/或不可移動(dòng)),如磁盤、光盤或磁帶。這類另外的存儲(chǔ)在圖1中由可移動(dòng)存儲(chǔ)109和不可移動(dòng)存儲(chǔ)110示出。計(jì)算機(jī)存儲(chǔ)介質(zhì)可包括以用于儲(chǔ)存如計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù)等信息的任一方法和技術(shù)實(shí)現(xiàn)的易失性和非易失性、可移動(dòng)和不可移動(dòng)介質(zhì)。系統(tǒng)存儲(chǔ)器104、可移動(dòng)存儲(chǔ)109和不可移動(dòng)存儲(chǔ)110都是計(jì)算機(jī)存儲(chǔ)介質(zhì)的示例。計(jì)算機(jī)存儲(chǔ)介質(zhì)包括但不限于,RAM、ROM、EEPROM、閃存或其它存儲(chǔ)器技術(shù)、CD-ROM、數(shù)字多功能盤(DVD)或其它光存儲(chǔ)、磁盒、磁帶、磁盤存儲(chǔ)或其它磁存儲(chǔ)設(shè)備、或可以用來(lái)儲(chǔ)存期望的信息并可由計(jì)算裝置100訪問(wèn)的任一其它介質(zhì)。任一這類計(jì)算機(jī)存儲(chǔ)介質(zhì)可以是裝置100的一部分。計(jì)算裝置100也可具有(多個(gè))輸入設(shè)備112,如鍵盤、鼠標(biāo)、輸入筆、語(yǔ)音輸入設(shè)備、觸摸輸入設(shè)備等等。也可包括(多個(gè))輸出設(shè)備114,如顯示器、揚(yáng)聲器、打印機(jī)等等。這些設(shè)備在本領(lǐng)域中是眾所周知的,無(wú)需在此詳細(xì)描述。
計(jì)算裝置100也包含允許裝置如通過(guò)網(wǎng)絡(luò)與其它計(jì)算裝置118進(jìn)行通信的通信連接116。通信連接116是通信介質(zhì)的一個(gè)示例。通信介質(zhì)通??梢杂弥T如載波或其它傳輸機(jī)制等已調(diào)制數(shù)據(jù)信號(hào)中的計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù)實(shí)施,并包括任一信息傳送介質(zhì)。術(shù)語(yǔ)“已調(diào)制數(shù)據(jù)信號(hào)”指以對(duì)信號(hào)中的信息進(jìn)行編碼的方式設(shè)置或改變其一個(gè)或多個(gè)特征的信號(hào)。作為示例而非局限,通信介質(zhì)包括有線介質(zhì),如有線網(wǎng)絡(luò)或直接連線連接,以及無(wú)線介質(zhì),如聲學(xué)、RF、紅外和其它無(wú)線介質(zhì)。本發(fā)明使用的術(shù)語(yǔ)計(jì)算機(jī)可讀介質(zhì)包括存儲(chǔ)介質(zhì)和通信介質(zhì)兩者。
本發(fā)明針對(duì)的是可通過(guò)屬性來(lái)控制的測(cè)試實(shí)例繼承行為。從其導(dǎo)出測(cè)試對(duì)象的基礎(chǔ)測(cè)試類對(duì)于減少測(cè)試代碼和管理是有用的。例如,基礎(chǔ)測(cè)試類及其導(dǎo)出的對(duì)象可用于實(shí)現(xiàn)在整個(gè)測(cè)試類集之間公用的步驟(如,啟動(dòng)要被測(cè)試的軟件片斷并令其進(jìn)入某一階段)。繼承的原理簡(jiǎn)化了當(dāng)例如基類被修改時(shí)對(duì)測(cè)試軟件的管理。當(dāng)基類被修改時(shí),從該基類導(dǎo)出的所有測(cè)試類被自動(dòng)修改。因此,當(dāng)改變對(duì)于修改(例如軟件啟動(dòng)方式)為必需時(shí),只要修改一個(gè)項(xiàng)(而非每一測(cè)試)。如下文所討論的,可使用選擇性的繼承來(lái)允許使用繼承的方法正確地執(zhí)行測(cè)試。
盡管繼承是非常有用的,然而不需要對(duì)于從該基礎(chǔ)測(cè)試類導(dǎo)出的每一方法強(qiáng)制繼承。依照本發(fā)明,對(duì)屬性提供了一種機(jī)制用于選擇是否應(yīng)當(dāng)應(yīng)用繼承。使用測(cè)試實(shí)例繼承行為(可通過(guò)屬性來(lái)控制)允許使用繼承的方法正確地執(zhí)行測(cè)試。屬性定義的繼承提供了基于類的分層結(jié)構(gòu)對(duì)方法進(jìn)行排序的方式(其中,排序由存在的屬性確定)。例如,以遞歸的方式,設(shè)置步驟首先在基類上運(yùn)行,然后在子類上運(yùn)行,依此類推(而非首先在子類上運(yùn)行,然后在基類上運(yùn)行,或甚至是隨機(jī)的方式)。如參考圖2所描述的,執(zhí)行引擎確定應(yīng)當(dāng)繼承哪些方法,以及執(zhí)行這些方法的順序。
用于說(shuō)明測(cè)試實(shí)例繼承的偽代碼的一個(gè)實(shí)例給出如下類TestEnvironmentBase(測(cè)試環(huán)境基)Setup(設(shè)置)方法Teardown(拆卸)方法類ApplicationSpecificTest(應(yīng)用專用測(cè)試)從TestEnvironmentBase繼承Setup(設(shè)置)方法Test(測(cè)試)方法Teardown(拆卸)方法對(duì)于測(cè)試類ApplicationSpecificTest(應(yīng)用專用測(cè)試)將運(yùn)行的Test(測(cè)試)方法以它們應(yīng)當(dāng)運(yùn)行的順序列出TestEnvironmentBase.Setup方法ApplicationSpecificTest.Setup方法ApplicationSpecificTest.Test方法ApplicationSpecificTest.Teardown方法TestEnvironmentBase.Teardown方法在上述示例中,縮進(jìn)表示類的分層結(jié)構(gòu),并示出了對(duì)給定類和子類的方法的繼承原理。例如,ApplicationSpecificTest.Setup從TestEnvironmentBase.Setup類繼承(除非測(cè)試作者另外選擇,在這一情況下,測(cè)試作者可指定該方法不應(yīng)當(dāng)被繼承)。
因此,測(cè)試作者可書寫從基類導(dǎo)出的方法,并如所需要的選擇性地向子類應(yīng)用繼承原理。提取引擎依照類的分層結(jié)構(gòu)對(duì)方法排序,這確定了執(zhí)行順序。方法的排序可通過(guò)使用屬性內(nèi)定義的比較函數(shù)來(lái)完成,其結(jié)果是屬性本身可用于確定類的分層結(jié)構(gòu)。修改基類自動(dòng)修改其子類,除非屬性規(guī)定繼承被“關(guān)閉”。
另外,可繼承修改測(cè)試方法的狀態(tài)的屬性。例如,可繼承規(guī)定某一異常是繼承的屬性(在否定測(cè)試(negative testing)的情況下)。這一異常被繼承,并將測(cè)試方法結(jié)果狀態(tài)從“失敗”修改為“通過(guò)”,如果測(cè)試方法拋出異常,則這覆蓋了默認(rèn)的失敗實(shí)例。
測(cè)試自動(dòng)化系統(tǒng)體系結(jié)構(gòu)圖2所示是用于實(shí)施本發(fā)明的示例性環(huán)境的框圖。圖2所示的示例性環(huán)境是包括測(cè)試裝具模塊210、測(cè)試運(yùn)行庫(kù)220和測(cè)試實(shí)例腳本230的測(cè)試自動(dòng)化系統(tǒng)200。
測(cè)試運(yùn)行庫(kù)在一個(gè)實(shí)施例中,測(cè)試運(yùn)行庫(kù)220是從測(cè)試裝具模塊中抽象出測(cè)試實(shí)例的知識(shí)的對(duì)象的集合。測(cè)試運(yùn)行庫(kù)220通常包括測(cè)試服務(wù)提供者對(duì)象221、提取引擎222、屬性223和測(cè)試方法執(zhí)行程序224。測(cè)試運(yùn)行庫(kù)220可由不同的裝具模塊用于提供對(duì)特定類型的測(cè)試實(shí)例格式的一致支持。通過(guò)擴(kuò)展,測(cè)試裝具模塊可使用不同的測(cè)試運(yùn)行庫(kù)來(lái)支持不同類型的測(cè)試實(shí)例格式。測(cè)試裝具模塊通常確定對(duì)特定的測(cè)試實(shí)例格式使用哪一測(cè)試運(yùn)行庫(kù)。
測(cè)試實(shí)例提取是通過(guò)一專用的提取對(duì)象(從測(cè)試服務(wù)提供者對(duì)象221中獲取,下文描述)來(lái)完成的,而調(diào)用是由向測(cè)試裝具模塊返回廣義結(jié)果的對(duì)象(測(cè)試方法執(zhí)行程序224,也在下文描述)執(zhí)行的。測(cè)試方法執(zhí)行程序使用廣義接口對(duì)屬性求值,以控制方法的執(zhí)行。
不需要測(cè)試裝具模塊來(lái)例如對(duì)屬性求值、確定測(cè)試方法應(yīng)當(dāng)執(zhí)行的順序、為方法調(diào)用構(gòu)建自變量列表等等。測(cè)試裝具模塊通常不能直接訪問(wèn)執(zhí)行那些任務(wù)所需的這一信息,這有助于確保不同的測(cè)試裝具模塊之間的更一致的測(cè)試執(zhí)行。所有的依賴測(cè)試裝具模塊的功能(記入日志、“遙控”等等)應(yīng)當(dāng)是由測(cè)試裝具模塊實(shí)現(xiàn)的、由接口來(lái)描述的、并且儲(chǔ)存在測(cè)試服務(wù)提供者對(duì)象中,以在測(cè)試執(zhí)行期間使用的對(duì)象。因此,可創(chuàng)建容易地能夠在不同的測(cè)試運(yùn)行庫(kù)之間切換,而不需要對(duì)測(cè)試裝具模塊代碼的改變的測(cè)試裝具模塊。
測(cè)試服務(wù)測(cè)試服務(wù)提供者對(duì)象221由測(cè)試裝具模塊用于檢索提取引擎,并由測(cè)試實(shí)例腳本用于檢索測(cè)試裝具模塊實(shí)現(xiàn)的功能的對(duì)象(包括諸如記入日志、同步等測(cè)試服務(wù))。
測(cè)試服務(wù)提供者對(duì)象通常提供用于方便訪問(wèn)測(cè)試服務(wù)的方法。AddService(添加服務(wù))方法被調(diào)用以儲(chǔ)存對(duì)實(shí)現(xiàn)測(cè)試服務(wù)的對(duì)象的引用。測(cè)試服務(wù)對(duì)象應(yīng)當(dāng)實(shí)現(xiàn)一“廣義”類型,它方便了不同的裝具模塊能夠提供的一組標(biāo)準(zhǔn)服務(wù)。傳入的對(duì)象應(yīng)當(dāng)實(shí)現(xiàn)屬性或測(cè)試方法所需的功能。該方法應(yīng)當(dāng)由測(cè)試裝具模塊對(duì)測(cè)試裝具模塊提供的每一服務(wù)調(diào)用,它一般在執(zhí)行測(cè)試方法之前完成。
GetService(獲取服務(wù))方法通常被調(diào)用以檢索一種類型的測(cè)試服務(wù)對(duì)象。傳入的類型應(yīng)當(dāng)表示由測(cè)試服務(wù)對(duì)象實(shí)現(xiàn)的接口。如果找到,則返回實(shí)現(xiàn)該對(duì)象的對(duì)象。如果未找到對(duì)象,則返回表示這一結(jié)果的值(如,返回空)。如果測(cè)試或?qū)傩孕枰淮嬖诘臏y(cè)試服務(wù),則所執(zhí)行的測(cè)試方法應(yīng)當(dāng)失敗。
AddDefaultServices(添加默認(rèn)服務(wù))保護(hù)的方法通常由構(gòu)造函數(shù)調(diào)用。它通常用于添加測(cè)試運(yùn)行庫(kù)默認(rèn)地提供的任何測(cè)試服務(wù),如提取引擎。
測(cè)試服務(wù)提供者對(duì)象數(shù)據(jù)和方法調(diào)用應(yīng)當(dāng)是靜態(tài)的,使得由測(cè)試裝具模塊設(shè)置的數(shù)據(jù)集可在稍后的時(shí)間點(diǎn)由對(duì)測(cè)試服務(wù)提供者的其它調(diào)用來(lái)檢索。對(duì)象通常是實(shí)現(xiàn)上述功能的類。該對(duì)象的構(gòu)造函數(shù)通常用于調(diào)用AddDefaultServices方法。
提取引擎提取引擎222用于對(duì)特定的測(cè)試實(shí)例腳本從測(cè)試裝具模塊的測(cè)試實(shí)例中檢索測(cè)試方法的有序列表。通常在測(cè)試運(yùn)行庫(kù)只有一個(gè)提取引擎。
GetTestMethodWrappers(獲取測(cè)試方法包裝)方法用于對(duì)測(cè)試實(shí)例腳本檢索測(cè)試方法的有序列表。(測(cè)試方法包裝是測(cè)試方法執(zhí)行程序的特定實(shí)現(xiàn))。傳入到該方法的參數(shù)表示保持該測(cè)試實(shí)例的容件(container)。該方法返回方法的有序列表。如果在提取測(cè)試實(shí)例時(shí)發(fā)生錯(cuò)誤,則可“拋出”異常。如果沒有找到任何測(cè)試實(shí)例或測(cè)試方法,則通常返回空列表。空列表通常由測(cè)試裝具模塊作為失敗來(lái)處理。如果需要將額外的數(shù)據(jù)傳入提取引擎,則它可由TestHarnessDataProvider(測(cè)試裝具模塊數(shù)據(jù)提供者)測(cè)試服務(wù)通過(guò)TestServicesProvider(測(cè)試服務(wù)提供者)對(duì)象來(lái)提供。
提取引擎對(duì)象中存在的大部分功能在不同的運(yùn)行庫(kù)都是相同的;從一個(gè)運(yùn)行庫(kù)到另一運(yùn)行庫(kù)顯著改變的唯一細(xì)節(jié)是使用了哪些屬性。應(yīng)當(dāng)創(chuàng)建對(duì)象以便于新提取引擎和運(yùn)行庫(kù)的容易創(chuàng)建。該類通常實(shí)現(xiàn)以下函數(shù)TypeIsATestCase(類型是測(cè)試實(shí)例),如果傳入的類型是測(cè)試實(shí)例,則返回“真”,否則返回“假”。這一函數(shù)通過(guò)查找測(cè)試實(shí)例類屬性來(lái)檢查類型上存在的屬性,以確定類型是否為測(cè)試實(shí)例。
MethodIsATestMethod(方法是測(cè)試方法),如果傳入的方法是測(cè)試方法則返回“真”,否則返回“假”。該函數(shù)通過(guò)查找執(zhí)行屬性來(lái)檢查類型上存在的屬性,以確定類型是否為測(cè)試方法。
GetMethodWrappersFromType(從類型獲取方法包裝),它收集具有執(zhí)行屬性的類型上所有相關(guān)的公有非靜態(tài)方法,并返回這些方法作為MethodWrappers(下文討論)的有序列表。在使用.NET環(huán)境的一個(gè)實(shí)施例中,列表使用構(gòu)建到.Net數(shù)組中的分類功能來(lái)排序,使得MethodWrapper調(diào)用一比較例程來(lái)對(duì)列表進(jìn)行排序。如果不能創(chuàng)建該類型的實(shí)例,則該方法失敗,并返回空列表。
提取引擎可使用測(cè)試服務(wù)來(lái)檢索可用于修改測(cè)試提取的信息。該信息可儲(chǔ)存在諸如XML文件等文件中,那是按照為儲(chǔ)存測(cè)試提取信息而定義的模式。如果由測(cè)試服務(wù)提供的數(shù)據(jù)不涉及依照該模式的XML文件,則可忽略修改數(shù)據(jù)。
提取引擎通常加載所指定的所有提取修改器XML文件。XML文件的內(nèi)容是,例如,放入兩個(gè)“存儲(chǔ)桶(bucket)”中測(cè)試包括和測(cè)試排除。如果兩個(gè)存儲(chǔ)桶都為空,則提取引擎應(yīng)當(dāng)包括所有的測(cè)試。這一情況等效于沒有提取修改符xml文件,或不能檢索提取引擎數(shù)據(jù)源測(cè)試服務(wù)。如果僅排除存儲(chǔ)桶為空,則提取引擎應(yīng)當(dāng)包括所有的測(cè)試。如果僅包括存儲(chǔ)桶為空,則提取引擎應(yīng)當(dāng)包括所有的測(cè)試,并排除在排除存儲(chǔ)桶中所列出的測(cè)試。如果兩個(gè)存儲(chǔ)桶都有數(shù)據(jù),則提取引擎應(yīng)當(dāng)包括在包括存儲(chǔ)桶中未在排除存儲(chǔ)桶中列出的測(cè)試(使得排除列表具有對(duì)包括列表的控制權(quán)限)。
測(cè)試方法執(zhí)行程序測(cè)試方法執(zhí)行程序224用于執(zhí)行測(cè)試方法,而無(wú)需調(diào)用者具有關(guān)于該方法或其屬性的預(yù)先知識(shí)。Invoke(調(diào)用)方法被調(diào)用來(lái)執(zhí)行測(cè)試方法。返回保留操作結(jié)果的對(duì)象(通過(guò)、失敗、跳過(guò)等等)。Invoke方法負(fù)責(zé)處理與方法相關(guān)聯(lián)的屬性,并為所調(diào)用的方法創(chuàng)建參數(shù)列表(如果需要的話)。執(zhí)行通常由與測(cè)試方法相關(guān)聯(lián)的屬性修改。
Abort(中止)方法可被調(diào)用以中止當(dāng)前正在執(zhí)行的測(cè)試方法。中止通常導(dǎo)致當(dāng)前正在運(yùn)行的Invoke方法返回。在執(zhí)行了中止之后,沒有進(jìn)一步的測(cè)試可被正常地運(yùn)行。
CompareTo(比較)方法被調(diào)用以將兩個(gè)測(cè)試方法包裝(Test Method Wrapper)進(jìn)行比較。如果返回的結(jié)果小于零,則它表明該方法應(yīng)當(dāng)在另一測(cè)試方法包裝(與其進(jìn)行比較的方法)之前執(zhí)行。如果返回的結(jié)果等于零,則它表明執(zhí)行這兩個(gè)方法的順序無(wú)關(guān)緊要。如果返回的結(jié)果大于零,則它表明該方法應(yīng)當(dāng)在另一測(cè)試方法包裝之后執(zhí)行。
GetMethodAttributes(獲取方法屬性)方法被調(diào)用以檢索與從公用基礎(chǔ)方法屬性類導(dǎo)出的測(cè)試方法相關(guān)聯(lián)的屬性的有序列表。該屬性的有序類列表由測(cè)試方法包裝在若干位置使用。例如,Invoke方法(如上文所描述的)使用有序列表來(lái)以正確的順序?qū)傩郧笾?。同樣,GetMethodAttributes可用于將一個(gè)方法包裝與另一個(gè)進(jìn)行比較。諸如“Get AttributesDescription(獲取屬性描述)”等調(diào)用使用屬性的有序列表來(lái)創(chuàng)建與該方法相關(guān)聯(lián)的屬性的串描述。
測(cè)試方法包裝具有若干性質(zhì),它們可通過(guò)諸如調(diào)用“獲取Description(描述)”和“Get Name(獲取名字)”來(lái)檢索,以供測(cè)試裝具模塊使用。性質(zhì)從方法名和從其定義方法的類生成。在需要時(shí)可添加其它性質(zhì)。注意,這些性質(zhì)不需要裝具模塊知道關(guān)于所查詢的測(cè)試方法的任何知識(shí),并且可在不需要對(duì)現(xiàn)有測(cè)試裝具模塊的修改的情況下添加額外的性質(zhì)。
MethodResult(方法結(jié)果)對(duì)象用于將測(cè)試方法包裝的結(jié)果傳遞到測(cè)試裝具模塊。由于測(cè)試裝具模塊不必具有所調(diào)用的方法的預(yù)先知識(shí),因此以抽象的形式來(lái)表達(dá)結(jié)果。
對(duì)象通常需要從試圖執(zhí)行方法來(lái)表達(dá)三個(gè)可能的結(jié)果通過(guò)、跳過(guò)或失敗?!巴ㄟ^(guò)”通常表明方法在沒有錯(cuò)誤的情況下完成了執(zhí)行(例如,方法沒有將任何失敗記入日志、測(cè)試方法未拋出異常、以及沒有一個(gè)屬性有錯(cuò)誤)。“錯(cuò)誤”表明方法失敗(例如,測(cè)試方法表明失敗,或?qū)傩员砻魇??!疤^(guò)”表明方法被跳過(guò)而非被執(zhí)行(例如,屬性指定測(cè)試方法應(yīng)當(dāng)僅在服務(wù)器上運(yùn)行,但是測(cè)試正在客戶機(jī)機(jī)器上運(yùn)行;在這一情況下,方法將被跳過(guò))。
MethodResult對(duì)象也可包含可任選的消息,如結(jié)果消息和/或錯(cuò)誤消息。結(jié)果消息可以是方法結(jié)果的人類可讀的描述。在成功地執(zhí)行了一個(gè)方法之后,它將被保留為空,或者它可包含記錄的遍數(shù)。對(duì)于其中出現(xiàn)了錯(cuò)誤的已完成方法,可包括對(duì)該錯(cuò)誤的文本描述,而錯(cuò)誤消息可包含該錯(cuò)誤的細(xì)節(jié)。
當(dāng)由屬性“拋出”異常時(shí),TestConditionException類可用于傳送修改的方法狀態(tài)。例如,直接映射到方法狀態(tài)的三個(gè)導(dǎo)出類包括TestSkipException(測(cè)試跳過(guò)異常)、TestSucceededException(測(cè)試成功異常)和TestErrorException(測(cè)試錯(cuò)誤異常)。
屬性223通常用于修改和控制測(cè)試的執(zhí)行。測(cè)試依照測(cè)試實(shí)例腳本來(lái)執(zhí)行,它可通過(guò)使用屬性來(lái)定義??墒褂弥辽偃N基本類型的屬性類級(jí)屬性、方法級(jí)屬性和參數(shù)級(jí)屬性。
測(cè)試類級(jí)屬性是可任選的,并可用于修改例示的對(duì)象狀態(tài),使得測(cè)試提取可被跳過(guò)或?qū)е聦?duì)指示的類型多次執(zhí)行。預(yù)提取和后提取方法通常用于修改例示的對(duì)象狀態(tài)。測(cè)試類屬性允許測(cè)試實(shí)例腳本中的這類變化被實(shí)現(xiàn)。
方法級(jí)屬性能夠修改方法參數(shù)和方法執(zhí)行。在一個(gè)實(shí)施例中,方法級(jí)屬性包括執(zhí)行屬性和補(bǔ)充屬性。這兩種屬性都具有預(yù)調(diào)用和后調(diào)用方法。對(duì)方法級(jí)屬性求值的順序由一順序性質(zhì)確定,它在書寫屬性時(shí)定義;然而,屬性通常沒有關(guān)于可能存在哪些其它屬性的預(yù)先知識(shí)。每一階段的執(zhí)行修改可由基于優(yōu)先級(jí)的狀態(tài)系統(tǒng)處理一返回具有最高優(yōu)先級(jí)的狀態(tài)的屬性通常用于確定如何修改執(zhí)行。
執(zhí)行屬性用于將方法標(biāo)記為測(cè)試方法。沒有執(zhí)行屬性的方法通常不包括在測(cè)試中。執(zhí)行屬性的核心責(zé)任是建立高級(jí)順序以測(cè)試并評(píng)估方法結(jié)果。方法應(yīng)當(dāng)沒有一個(gè)以上的執(zhí)行屬性。當(dāng)存在一個(gè)以上執(zhí)行屬性時(shí),提取和執(zhí)行行為通常是未定義的。執(zhí)行屬性的示例包括“Setup(設(shè)置)”、“Step(步進(jìn))”和“Teardown(拆卸)”屬性。
補(bǔ)充屬性執(zhí)行補(bǔ)充行動(dòng)以修改測(cè)試方法的執(zhí)行。補(bǔ)充屬性的核心責(zé)任是執(zhí)行對(duì)測(cè)試的執(zhí)行必需的次要任務(wù)。它們通常不用于標(biāo)記高級(jí)順序。方法可具有任意數(shù)量的補(bǔ)充屬性。補(bǔ)充屬性的示例包括“WaitFor(等待)”和“Target(目標(biāo))”屬性。
參數(shù)級(jí)屬性可選地用于修改對(duì)方法的參數(shù)輸入,并在執(zhí)行了方法之后修改對(duì)象的狀態(tài)(如,上下文狀態(tài))。當(dāng)使用了方法級(jí)屬性時(shí),參數(shù)級(jí)屬性通常不用于改變測(cè)試的執(zhí)行。然而,如果拋出了異常,則測(cè)試方法響應(yīng)于該異常立即失敗。在一個(gè)實(shí)施例中,對(duì)每一參數(shù)只有一個(gè)參數(shù)級(jí)屬性;具有一個(gè)以上參數(shù)級(jí)屬性的行為保留未定義。參數(shù)級(jí)屬性在調(diào)用方法前對(duì)方法級(jí)屬性求值之后被求值,并在調(diào)用方法之后方法級(jí)屬性被求值之前被求值。參數(shù)級(jí)屬性的一個(gè)示例包括“ContextMapping(上下文映射)”屬性。
MethodState(方法狀態(tài))對(duì)象由方法屬性用于控制測(cè)試方法的執(zhí)行。由于可向一個(gè)測(cè)試方法分配多個(gè)屬性(并且由于每一屬性可潛在地改變測(cè)試方法的執(zhí)行),每一屬性可與MethodState對(duì)象進(jìn)行通信,以確保測(cè)試方法的一致執(zhí)行。
MethodState對(duì)象可包括涉及執(zhí)行狀態(tài)、消息、錯(cuò)誤代碼和狀態(tài)覆蓋優(yōu)先級(jí)的信息。執(zhí)行狀態(tài)包括關(guān)于方法如何中止(如,跳過(guò)、通過(guò)、失敗)、狀態(tài)是否被準(zhǔn)許來(lái)改變、以及方法是否應(yīng)當(dāng)被執(zhí)行的信息。消息可用于可任選地呈現(xiàn)指示測(cè)試方法為何處于特定狀態(tài)的文本。錯(cuò)誤代碼可用于指示測(cè)試方法包裝可能在執(zhí)行測(cè)試方法時(shí)遇到的錯(cuò)誤的細(xì)節(jié)。狀態(tài)覆蓋優(yōu)先級(jí)字段可用于通過(guò)允許僅當(dāng)新狀態(tài)具有高于現(xiàn)有狀態(tài)的優(yōu)先級(jí)時(shí)改變執(zhí)行狀態(tài)、消息和錯(cuò)誤代碼,來(lái)提高測(cè)試方法執(zhí)行的一致性。
測(cè)試方法包裝(224)執(zhí)行測(cè)試方法,直到達(dá)到終止?fàn)顟B(tài)。當(dāng)達(dá)到終止?fàn)顟B(tài)時(shí),從最終的MethodState對(duì)象構(gòu)造MethodResult對(duì)象。
執(zhí)行屬性負(fù)責(zé)對(duì)從方法調(diào)用獲取的結(jié)果進(jìn)行語(yǔ)法分析。為確定方法是通過(guò)還是失敗,可監(jiān)視日志中的通過(guò)和失敗條目。如果任何失敗被記入日志,則該方法可能失敗。如果沒有通過(guò)或失敗被記入日志,則方法也可能失敗。如果從測(cè)試方法或任何屬性拋出異常,則方法也可能失敗。否則,方法可被認(rèn)為已(成功地)通過(guò)。
測(cè)試示例腳本在一個(gè)實(shí)施例中,測(cè)試示例腳本230是對(duì)特定的測(cè)試示例協(xié)調(diào)測(cè)試方法的執(zhí)行的對(duì)象集合。由于由測(cè)試方法執(zhí)行程序(224)提供并通過(guò)它的接口,可在沒有測(cè)試裝具模塊的預(yù)先知識(shí)的情況下書寫測(cè)試方法。
測(cè)試示例腳本230通常包括測(cè)試方法231和其它方法和數(shù)據(jù)232。測(cè)試方法通過(guò)使用運(yùn)行庫(kù)對(duì)象(包括測(cè)試方法執(zhí)行程序)而非通過(guò)查詢特定的測(cè)試裝具模塊,來(lái)訪問(wèn)測(cè)試裝具模塊對(duì)象。
測(cè)試裝具模塊在一個(gè)實(shí)施例中,測(cè)試裝具模塊210是協(xié)調(diào)測(cè)試實(shí)例的執(zhí)行并提供各種測(cè)試服務(wù)的對(duì)象的集合。測(cè)試裝具模塊210通常包括UI(用戶界面)211、執(zhí)行引擎212、上下文對(duì)象213和記入日志對(duì)象214。用于添加的功能的目的的測(cè)試裝具模塊可包括諸如自動(dòng)化系統(tǒng)接口等其它對(duì)象。
執(zhí)行引擎(212)負(fù)責(zé)使用測(cè)試運(yùn)行庫(kù)(220)加載并執(zhí)行測(cè)試實(shí)例腳本。圖3示出了依照本發(fā)明的各方面的執(zhí)行引擎的過(guò)程流300。在開始?jí)K之后,過(guò)程移動(dòng)到塊310,加載測(cè)試運(yùn)行庫(kù)。在用.Net書寫測(cè)試運(yùn)行庫(kù)的一個(gè)實(shí)施例中,測(cè)試運(yùn)行庫(kù)組件和測(cè)試實(shí)例腳本組件被加載到AppDomain(應(yīng)用程序域)中。測(cè)試裝具模塊可顯示諸如加載的.Net運(yùn)行庫(kù)的版本,或正使用的測(cè)試運(yùn)行庫(kù)的版本等信息。
在塊320,一個(gè)或多個(gè)測(cè)試實(shí)例被加載/編譯到存儲(chǔ)器。測(cè)試實(shí)例可被預(yù)編譯并加載到存儲(chǔ)器,或加載到存儲(chǔ)器然后被編譯。測(cè)試裝具模塊可顯示關(guān)于測(cè)試實(shí)例腳本以及測(cè)試實(shí)例腳本是否被成功地加載和/或編譯的信息。
在塊330繼續(xù),獲取提取引擎。提取引擎通過(guò)首先檢索測(cè)試服務(wù)提供者對(duì)象、(221)來(lái)獲取。下一步,從測(cè)試方法執(zhí)行程序(220)確定基礎(chǔ)提取引擎的類型。調(diào)用測(cè)試服務(wù)提供者對(duì)象上的靜態(tài)GetService(獲取服務(wù))函數(shù)(將基礎(chǔ)提取引擎的類型傳遞到測(cè)試服務(wù)提供者對(duì)象),以接收對(duì)提取引擎的引用。
在塊340,測(cè)試裝具模塊功能被添加到測(cè)試服務(wù)提供者。測(cè)試服務(wù)提供者上的AddService(添加服務(wù))方法用于向測(cè)試服務(wù)提供者添加在測(cè)試裝具模塊上實(shí)現(xiàn)的測(cè)試服務(wù)。測(cè)試服務(wù)包括實(shí)現(xiàn)諸如重啟機(jī)制、記入日志、上下文等的各種接口的對(duì)象。如果期望將數(shù)據(jù)傳遞到提取引擎(例如,指定某一方法應(yīng)當(dāng)被包括或跳過(guò)的XML文件),則可使用實(shí)現(xiàn)測(cè)試裝具模塊數(shù)據(jù)提供者接口的測(cè)試服務(wù)對(duì)象。
在塊350,提取引擎用于獲取測(cè)試實(shí)例步驟。在塊330獲取的提取引擎用于調(diào)用提取引擎的GetTestMethodWrappers(獲取測(cè)試方法包裝)方法、向方法傳遞保留測(cè)試實(shí)例的AppDomain。通常返回一個(gè)TestMethodWrappers(測(cè)試方法包裝)的數(shù)組。
方法包裝的數(shù)組通常包含應(yīng)當(dāng)以它們?cè)跀?shù)組中存在的順序執(zhí)行的測(cè)試行動(dòng)的列表。(提取引擎通常負(fù)責(zé)對(duì)數(shù)組進(jìn)行排序)。
在塊360,以列出方法的順序執(zhí)行在塊350檢索到的方法列表。每一方法通過(guò)調(diào)用Invoke(調(diào)用)方法來(lái)執(zhí)行。調(diào)用方法通常返回關(guān)于測(cè)試行動(dòng)結(jié)果的細(xì)節(jié)。細(xì)節(jié)可包括成功/失敗/跳過(guò)結(jié)果,以及附加細(xì)節(jié)。結(jié)果的細(xì)節(jié)可以是,例如,被記入日志,或用于更新UI。
圖4示出了依照本發(fā)明的各方面的執(zhí)行引擎的過(guò)程流400。對(duì)于每一測(cè)試行動(dòng),重復(fù)過(guò)程400。執(zhí)行引擎調(diào)用InvokeInstanceMethod(調(diào)用實(shí)例方法)來(lái)例示特定測(cè)試行動(dòng)的執(zhí)行。InvokeInstanceMethod調(diào)用InstanceMethod(實(shí)例方法)來(lái)調(diào)用特定的測(cè)試行動(dòng)。InstanceMethod進(jìn)而調(diào)用MethodWrapper(即,示例測(cè)試方法執(zhí)行程序)來(lái)調(diào)用特定的測(cè)試行動(dòng)。
方法包裝對(duì)特定測(cè)試行動(dòng)的屬性進(jìn)行求值并執(zhí)行(預(yù)調(diào)用)。方法包裝接下來(lái)依照所求值/執(zhí)行的測(cè)試方法調(diào)用測(cè)試方法。在執(zhí)行了測(cè)試方法之后,屬性再一次被求值/執(zhí)行(后調(diào)用)。方法包裝解釋后調(diào)用屬性求值的結(jié)果,并返回表示該結(jié)果的值。ActionResult(行動(dòng)結(jié)果)被傳遞到InstanceMethod,并進(jìn)而被傳遞到InvokeInstanceMethod。InvokeInstanceMethod評(píng)估返回值并將結(jié)果傳遞到執(zhí)行引擎。
作為對(duì)本發(fā)明的進(jìn)一步說(shuō)明,提供偽代碼清單如下ExtractionEngine.GetTestMethodWrappersTestMethodWrappers [] methodWrappers;For(AppDomain中的每一組件){For(組件中的每一類型){If(TypeIsATestCase(type)){methodWrappers+=GetMethodWrappersFromType(type)}}}Return methodWrappersExtractionEngine.GetMethodWrappersFromTypeTestMethodWrappers [] allMethodWrappersExtractionState curState=無(wú)效狀態(tài)Do{TestMethodWrappers [] instanceMethodWrapperscurState.Reset()
if(類型是可創(chuàng)建的)Object testObject=new類型;ElseReturn空列表;For(類型上的每一屬性){If(屬性是測(cè)試示例屬性的種類)curState=Attribute.PreExtract(testObject)}If(curState=終止?fàn)顟B(tài))break;MethodInfo [] potentialTestMethods=type.GetAllPublicMethods()For(potentialTestMethods中的每一方法){If(MethodIsATestMethod(method)){TestMethodWrapper wrapper=new Wrapper(obj,method)If(!wrapper.GetMethodAttributes
.Inherit){If(method.definingType==type)instanceMethodWrappers+=wrapper}ElseinstanceMethodWrappers+=wrapper}}For(類型上的每一屬性){If(屬性是測(cè)試實(shí)例屬性的種類)
curState=Attribute.PostExtract()}instanceMethodWrappers.Sort()allMethodWrappers+=instanceMethodWrappers}While(curState?。浇K止?fàn)顟B(tài))//無(wú)效狀態(tài)或跳過(guò)Return allMethodWrappers;TestMethodWrapper.InvokeMethodState curState=無(wú)效狀態(tài)Do{curState.Reset()TestMethodAttribute [] methodAttributes=GetMethodAttributes()methodAttributes.Reverse()//對(duì)所有屬性預(yù)調(diào)用Try{//方法級(jí)屬性For(methodAttributes中的每一屬性){MethodState newState=attribute.PreInvoke(...)if(newState.execstate?。絥ochange &&
newState.priority>curState.priority){curState=newState}}}Catch(UnexpectedCondition)
{curState=new MethodState(UnexpectedCondition);}Catch(e){//如果屬性拋出異常,調(diào)用失敗curState=new MethodState(e);break;}//如果需要的話評(píng)估狀態(tài)和停止調(diào)用//-狀態(tài)必需在檢查參數(shù)級(jí)屬性之前評(píng)估if(curState.execstate==終止?fàn)顟B(tài)){break;}Try{//參數(shù)級(jí)狀態(tài)屬性-這些屬性不能修改狀態(tài),//但是如果它們拋出,則調(diào)用失敗For(方法上的每一參數(shù)){For(參數(shù)上的每一屬性){If(attribute is kind ofMotifParamAttribute)Attribute.PreInvoke(...)}}}Catch(e){curState=new MethodState(e)break;
}//執(zhí)行測(cè)試方法Object result;Try{result=method.invoke(...)}Catch(e){//注意如果方法拋出,則測(cè)試不自動(dòng)失??;//相反,異常作為返回值來(lái)處理,供執(zhí)行屬性處理result=e}//所有屬性上的后調(diào)用//如果任一屬性拋出,調(diào)用失敗curState.Reset()Try{//對(duì)參數(shù)級(jí)屬性的后調(diào)用For(方法上的每一參數(shù)){For(參數(shù)上的每一屬性){If(attribute is kind ofMotifParamAttribute)Attribute.PostInvoke(...)}}//所有方法級(jí)屬性上的后調(diào)用For(methodAttributes中的每一屬性){MethodState newState=attrib.PostInvoke(...)
If(newState.execstate!=nochange &&
newState.priority>curState.priority){curState=newState;}}}Catch(UnexpectedCondition){curState=new MethodState(UnexpectedCondition);}Catch(e){curState=new MethodState(e)break;}}While(curState?。浇K止?fàn)顟B(tài))//成功、錯(cuò)誤、跳過(guò)、無(wú)效狀態(tài)將最終狀態(tài)記入日志Return MethodResult(curState);ExecutionAttribute.PreInvokelogManager=TestServiceProvider.GetService(LogManager)If(logManager==null)Throw UnexpectedErrorCondition(″LogManager object notfound″)logManager.AddListener(us)Return MethodState(執(zhí)行,低優(yōu)先級(jí))ExecutionAttribute.PostInvokeLogManager.RemoveListener(us)If(result is kind of exception){
Return MethodState(失敗,低優(yōu)先級(jí))}Else If(failedCount>0){Return MethodState(失敗,中優(yōu)先級(jí))}Else If(passedCount==0){Return MethodState(失敗,中優(yōu)先級(jí))}Else//passedCount>0,failedCount=0{Return MethodState(通過(guò),中優(yōu)先級(jí))}TargetAttribute.PreInvokeIf(Context.CurrentMachine不在RunOnMachinesList中)Throw UnexpectedSkipCondition(Context.CurrentMachine+″not in″+RunOnMachinesList)ElseReturn MethodState(nochange)VariationsAttribute.PostInvokecurrentVariation++;If(currentVariation<totalVariations)Return MethodState(執(zhí)行,高優(yōu)先級(jí))ElseReturn MethodState(通過(guò)/失敗,中優(yōu)先級(jí))以上說(shuō)明書、實(shí)例和數(shù)據(jù)提供了本發(fā)明的組成部分的制造和使用的完整描述。由于可作出本發(fā)明的許多實(shí)施例而不脫離本發(fā)明的范圍,本發(fā)明駐留在所附權(quán)利要求書中。
權(quán)利要求
1.一種具有計(jì)算機(jī)可執(zhí)行組件的計(jì)算機(jī)可讀介質(zhì),所述組件包括一測(cè)試實(shí)例腳本對(duì)象,它包括被安排成測(cè)試電子系統(tǒng)的測(cè)試方法,其中,所述測(cè)試方法以包括基類和子類的分層結(jié)構(gòu)排列,其中,每一子類從所述基類導(dǎo)出,并且其中,依照所述分層結(jié)構(gòu)內(nèi)方法的排列,所述繼承的原理被應(yīng)用于每一測(cè)試方法;以及一測(cè)試裝具模塊,它被安排成為測(cè)試方法提供系統(tǒng)測(cè)試服務(wù)。
2.如權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述繼承的原理被選擇性地應(yīng)用于子類測(cè)試方法。
3.如權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述子類測(cè)試方法包括一被安排成確定是否應(yīng)用所述繼承原理的屬性。
4.如權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,還包括一測(cè)試提取引擎,它被配置成依照所述分層結(jié)構(gòu)對(duì)所述測(cè)試方法進(jìn)行排序。
5.如權(quán)利要求4所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述測(cè)試提取引擎被配置成使用一在所述屬性中定義的比較函數(shù)來(lái)依照所述分層結(jié)構(gòu)對(duì)所述測(cè)試方法進(jìn)行排序。
6.如權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述基類測(cè)試方法包括一設(shè)置方法和一拆卸方法。
7.如權(quán)利要求6所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述子類測(cè)試方法包括一設(shè)置方法和一拆卸方法。
8.一種用于自動(dòng)化測(cè)試的方法,其特征在于,包括提供被安排成測(cè)試電子系統(tǒng)的測(cè)試方法;以包括基類和子類的分層結(jié)構(gòu)安排所提供的測(cè)試方法,其中,每一子類從所述基類導(dǎo)出;依照所述分層結(jié)構(gòu)內(nèi)的方法排列,將所述繼承的原理應(yīng)用于每一測(cè)試方法;以及使用一測(cè)試裝具模塊來(lái)為所述測(cè)試方法提供系統(tǒng)測(cè)試服務(wù)。
9.如權(quán)利要求8所述的方法,其特征在于,所述繼承的原理被選擇性地應(yīng)用于子類測(cè)試方法。
10.如權(quán)利要求8所述的方法,其特征在于,還包括依照子類測(cè)試方法的屬性狀態(tài),確定是否應(yīng)用所述繼承的原理。
11.如權(quán)利要求8所述的方法,其特征在于,還包括依照所述分層結(jié)構(gòu)對(duì)所述測(cè)試方法進(jìn)行排序。
12.如權(quán)利要求11所述的方法,其特征在于,還包括使用一在所述屬性內(nèi)定義的比較函數(shù)來(lái)依照所述分層結(jié)構(gòu)對(duì)所述測(cè)試方法進(jìn)行排序。
13.如權(quán)利要求8所述的方法,其特征在于,所述基類測(cè)試方法包括一設(shè)置方法和一拆卸方法。
14.如權(quán)利要求13所述的方法,其特征在于,所述子類測(cè)試方法包括一設(shè)置方法和一拆卸方法。
15.一種測(cè)試自動(dòng)化系統(tǒng),其特征在于,包括一測(cè)試實(shí)例腳本對(duì)象,它包括被安排成測(cè)試電子系統(tǒng)的測(cè)試方法,其中,所述測(cè)試方法以包括基類和子類的分層結(jié)構(gòu)來(lái)排列,其中,每一子類從所述基類導(dǎo)出,并且其中,依照所述分層結(jié)構(gòu)內(nèi)的方法排列將所述繼承的原理應(yīng)用于每一測(cè)試方法。
16.如權(quán)利要求15所述的系統(tǒng),其特征在于,所述繼承的原理被選擇性地應(yīng)用于子類測(cè)試方法。
17.如權(quán)利要求15所述的系統(tǒng),其特征在于,所述子類測(cè)試方法包括一被安排成確定是否應(yīng)用所述繼承的原理的屬性。
18.如權(quán)利要求15所述的系統(tǒng),其特征在于,還包括一測(cè)試提取引擎,它被配置成依照所述分層結(jié)構(gòu)對(duì)所述測(cè)試方法進(jìn)行排序。
19.如權(quán)利要求18所述的系統(tǒng),其特征在于,所述測(cè)試提取引擎被配置成使用一在所述屬性內(nèi)定義的比較函數(shù)來(lái)依照所述分層結(jié)構(gòu)對(duì)所述測(cè)試方法進(jìn)行排序。
20.如權(quán)利要求15所述的系統(tǒng),其特征在于,所述基類測(cè)試方法包括一設(shè)置方法和一拆卸方法。
21.如權(quán)利要求15所述的系統(tǒng),其特征在于,所述子類測(cè)試方法包括一設(shè)置方法和一拆卸方法。
22.一種測(cè)試自動(dòng)化系統(tǒng),其特征在于,包括用于提供被安排成測(cè)試電子系統(tǒng)的測(cè)試方法的裝置;用于以包括基類和子類的分層結(jié)構(gòu)排列所提供的測(cè)試方法的裝置,其中每一子類從所述基類導(dǎo)出;用于依照所述分層結(jié)構(gòu)內(nèi)方法的排列將所述分層結(jié)構(gòu)的原理應(yīng)用于每一測(cè)試方法的裝置;以及使用一測(cè)試裝具模塊裝置來(lái)為所述測(cè)試方法提供系統(tǒng)測(cè)試服務(wù)。
23.如權(quán)利要求22所述的系統(tǒng),其特征在于,所述繼承的原理被選擇性地應(yīng)用于子類測(cè)試方法。
24.如權(quán)利要求22所述的系統(tǒng),其特征在于,還包括用于依照子類測(cè)試方法的屬性的狀態(tài)確定是否應(yīng)用所述繼承的原理的裝置。
25.如權(quán)利要求22所述的系統(tǒng),其特征在于,還包括用于依照所述分層結(jié)構(gòu)對(duì)所述測(cè)試方法進(jìn)行排序的裝置。
26.如權(quán)利要求25所述的系統(tǒng),其特征在于,還包括用于使用一在所述屬性內(nèi)定義的比較函數(shù)來(lái)依照所述分層結(jié)構(gòu)對(duì)所述測(cè)試方法進(jìn)行排序的裝置。
27.如權(quán)利要求22所述的系統(tǒng),其特征在于,所述基類測(cè)試方法包括一設(shè)置方法和一拆卸方法。
28.如權(quán)利要求27所述的系統(tǒng),其特征在于,所述子類測(cè)試方法包括一設(shè)置方法和一拆卸方法。
29.如權(quán)利要求22所述的系統(tǒng),其特征在于,還包括用于響應(yīng)于由子類測(cè)試方法繼承的屬性修改所述子類測(cè)試方法的狀態(tài)的裝置。
全文摘要
本發(fā)明針對(duì)的是一種可通過(guò)屬性來(lái)控制的測(cè)試實(shí)例繼承行為。從其導(dǎo)出測(cè)試對(duì)象的基礎(chǔ)測(cè)試類對(duì)減少測(cè)試實(shí)例代碼和管理是有用的。例如,基礎(chǔ)測(cè)試類及其導(dǎo)出的對(duì)象可用于實(shí)現(xiàn)在整個(gè)類集之間公用的步驟(如,啟動(dòng)要被測(cè)試的軟件片斷并令其進(jìn)入某一階段)。繼承的原理簡(jiǎn)化了測(cè)試軟件的管理,例如,當(dāng)基類被修改時(shí),從該測(cè)試實(shí)例導(dǎo)出的所有測(cè)試被自動(dòng)修改。因此,當(dāng)改變對(duì)于修改啟動(dòng)軟件的方式為必需時(shí),只需修改一個(gè)項(xiàng)(而非每一測(cè)試)。
文檔編號(hào)G06F11/22GK1677365SQ200510056259
公開日2005年10月5日 申請(qǐng)日期2005年3月31日 優(yōu)先權(quán)日2004年3月31日
發(fā)明者M·P·魯濱遜, O·J·波特四世, P·格伯 申請(qǐng)人:微軟公司