專利名稱:在應(yīng)用主機(jī)環(huán)境中執(zhí)行單元測試的方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明大體涉及軟件開發(fā),尤其涉及測試軟件組件。
背景技術(shù):
在軟件的開發(fā)、修改或優(yōu)化中通常都希望測試軟件??蓪④浖鳛橐粋€(gè)“黑盒子”進(jìn)行測試,這意味著應(yīng)用輸入來激勵(lì)該軟件,觀察響應(yīng)生成的輸出并將其與對(duì)正確功能軟件的預(yù)期響應(yīng)相比較。這樣的測試通常依靠使用與該軟件相接的現(xiàn)存外部接口添加輸入和輸出——所述接口即操作時(shí)用于與該軟件交換數(shù)據(jù)的接口。
圖1A示出了這一測試方法。使用了開發(fā)環(huán)境110和主機(jī)環(huán)境120。在開發(fā)環(huán)境110內(nèi)準(zhǔn)備測試。需要測試的程序在主機(jī)環(huán)境120內(nèi)操作。主機(jī)環(huán)境120包括接口122和124。
開發(fā)環(huán)境通常是建立在開發(fā)人員編寫或測試程序的計(jì)算機(jī)上的進(jìn)程。開發(fā)環(huán)境可以具有多種組件,諸如提供工具以幫助開發(fā)人員編寫程序或測試的一組件以及為執(zhí)行測試提供一測試環(huán)境的另一組件。主機(jī)環(huán)境通常是在相同或其他計(jì)算機(jī)上的進(jìn)程。主機(jī)環(huán)境是由人類用戶或由開發(fā)環(huán)境啟動(dòng)用于測試的主機(jī)應(yīng)用程序時(shí)由操作系統(tǒng)創(chuàng)建的。
開發(fā)環(huán)境110包括代理程序112。代理程序112是控制各個(gè)測試的定時(shí)和順序的軟件程序。代理程序112也可以將那些測試的結(jié)果與期望結(jié)果相比較并且可以處理那些測試的結(jié)果或?qū)⑵鋱?bào)告給開發(fā)人員或系統(tǒng)的某些其他部分。代理程序112調(diào)用測試,諸如114A、114B和114C。在示出的實(shí)施例中,代理程序112通過測試適配器113調(diào)用了一個(gè)測試。要執(zhí)行的每個(gè)測試都具有其自身的測試適配器用于為代理程序112提供對(duì)所有測試的標(biāo)準(zhǔn)接口。每個(gè)測試都施加輸入并觀察來自在主機(jī)環(huán)境120中運(yùn)行的測試程序的輸出。
可由能夠通過可擴(kuò)展接口接受內(nèi)插附件程序的應(yīng)用程序來創(chuàng)建主機(jī)環(huán)境120。例如在MicrosoftOffice應(yīng)用程序套件里的應(yīng)用程序,諸如Word字處理應(yīng)用程序或Excel電子表格應(yīng)用程序都接受內(nèi)插附件程序。內(nèi)插附件程序可以是由用戶編寫的或者是來自某些其他來源。內(nèi)插附件程序可有一個(gè)或多個(gè)單元形成。此外,主機(jī)環(huán)境可包括也可被測試的一個(gè)或多個(gè)單元。在圖1A中,要被測試的主機(jī)環(huán)境120中的單元一般是由諸如126A、126B和126C的單元示出的。
可以使用黑盒子測試來測試這些單元。對(duì)于黑盒子測試,可以通過諸如接口122和124的外部接口訪問待測程序。例如,圖1A中示出了測試114A到114C通過接口122施加輸入并通過接口124獲取結(jié)果。通過將實(shí)際結(jié)果與期望結(jié)果比較,就可驗(yàn)證待測程序的性能。
將軟件作為黑盒子測試的一個(gè)缺點(diǎn)是它需要多次輸入或輸入組合以完全實(shí)現(xiàn)所有的單元。此外,如果因?yàn)槲从^察到響應(yīng)一組特定輸入的期望輸出而檢測到錯(cuò)誤很難識(shí)別需要修改的指定代碼單元以糾正該錯(cuò)誤。
圖1B中示出了測試應(yīng)用程序的另一種方法。在圖1B中,將諸如單元126A的測試中的單元載入到測試環(huán)境130。有時(shí)被稱為“.測試設(shè)備”的代理程序112可類似地控制對(duì)要執(zhí)行測試的選擇和定序,諸如通過調(diào)用測試154。盡管在圖1B的實(shí)例中是在單個(gè)測試中的單元上和在開發(fā)環(huán)境或測試環(huán)境中執(zhí)行測試的。
開發(fā)環(huán)境130包括幫助開發(fā)人員編寫測試的工具。例如MicrosoftVisualStudio開發(fā)環(huán)境包含允許開發(fā)人員設(shè)計(jì)測試、控制這些測試的執(zhí)行并分析其結(jié)果的工具。MicrosoftVisual Studio開發(fā)環(huán)境中所含工具的一大特性稱為智能感知(Intellisense)。智能感知特性對(duì)代碼編輯器的用戶提供了上下文敏感的幫助。例如在用戶編寫訪問一程序內(nèi)一變量的代碼時(shí),智能感知特性就可為該用戶提供該程序內(nèi)的變量列表,允許用戶快速選擇正確的變量使用,或在用戶開始輸入指令時(shí),使代碼編輯器正確地完成這些指令。
如果含有待測碼的主機(jī)環(huán)境內(nèi)的計(jì)劃是參考了含有測試程序的開發(fā)環(huán)境內(nèi)的計(jì)劃,則使用Visual Studio開發(fā)環(huán)境的測試開發(fā)人員就能夠使用智能感知特性創(chuàng)建用于圖1A中示出的測試配置結(jié)構(gòu)的測試。然而僅僅是一個(gè)計(jì)劃的公共接口可在參考它的另一計(jì)劃中使用。因此,智能感知特性在訪問測試中的單元的非公共部分時(shí)是不可用的。
希望具有一種測試軟件單元的改進(jìn)方法。
發(fā)明內(nèi)容
本發(fā)明涉及一種對(duì)軟件單元執(zhí)行測試的方法,該方法允許該測試在主機(jī)環(huán)境內(nèi)運(yùn)行。在主機(jī)環(huán)境內(nèi)的測試確保該主機(jī)環(huán)境能夠正確地初始化測試中的單元并允許由主機(jī)應(yīng)用程序提供的上下文信息在測試期間可用。從而能夠?qū)崿F(xiàn)更為完全和精確的測試。在另一方面,在開發(fā)環(huán)境和主機(jī)環(huán)境之間的接口可由如下方法提供,即待測軟件的方法、性質(zhì)和其他參數(shù)即使不是公共的也能夠?yàn)殚_發(fā)環(huán)境所用。該特性使得動(dòng)態(tài)示例程序測試的生成成為可能。這也使得為準(zhǔn)備用于特定單元的測試程序的開發(fā)人員提供上下文敏感信息成為可能。
在一個(gè)方面,本發(fā)明涉及測試在第一環(huán)境中操作的程序的方法。這一方法在用于測試具有多個(gè)單元并有至少一個(gè)單元待測的程序尤為有效。本方法包括在第二環(huán)境中執(zhí)行測試代理程序。該測試代理程序指定將執(zhí)行用于測試測試中的單元的測試。響應(yīng)于執(zhí)行該測試代理程序,就在所述第一環(huán)境中執(zhí)行指定的測試。該測試生成了表示測試中的單元性能的測試結(jié)果。來自第一環(huán)境中操作的指定測試的測試結(jié)果被通信至在第二環(huán)境中操作的測試應(yīng)用程序。
在另一個(gè)方面,本發(fā)明涉及測試在第一環(huán)境中操作的程序的方法。該方法對(duì)測試具有多個(gè)單元并其中至少有一個(gè)單元是測試中的單元的程序尤為有效。本方法包括在第一環(huán)境中載入該程序并展現(xiàn)在所述第一環(huán)境中一對(duì)象的接口。該對(duì)象響應(yīng)由所述端口提供的信息而用于載入測試適配器。該測試適配器執(zhí)行測試中的單元的測試。
在又一個(gè)方面,本發(fā)明涉及具有執(zhí)行各步驟以實(shí)現(xiàn)提供了一開發(fā)環(huán)境的軟件系統(tǒng)的計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀介質(zhì),其中測試程序可以為測試在多個(gè)主機(jī)環(huán)境中的一個(gè)內(nèi)操作的程序的單元而開發(fā),所述計(jì)算機(jī)可執(zhí)行指令執(zhí)行的步驟包括創(chuàng)建測試代理程序;并且創(chuàng)建多個(gè)主機(jī)適配器中的一個(gè),配置成要由所述測試代理程序使用的每個(gè)主機(jī)適配器都調(diào)用在多個(gè)主機(jī)環(huán)境之一內(nèi)執(zhí)行的測試程序。
附圖并未按比例畫出。附圖中,由類似的序號(hào)表示在各圖中示出的每一相等或接近相等的組件。為了簡明起見,并未在每張附圖中標(biāo)出每一組件。在附圖中
圖1A是示出了現(xiàn)有技術(shù)中黑盒子測試的示意圖;圖1B是示出了現(xiàn)有技術(shù)中單元測試的示意圖;圖2A是示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的單元測試的示意圖;圖2B是示出了根據(jù)本發(fā)明另一個(gè)實(shí)施例的單元測試的示意圖;圖3是示出了根據(jù)本發(fā)明又一個(gè)實(shí)施例的單元測試的示意圖;圖4是示出了根據(jù)本發(fā)明再一個(gè)實(shí)施例的單元測試的示意圖;圖5是示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的用戶界面的示意圖;具體實(shí)施方式
圖1B中示出的測試方法的一個(gè)缺點(diǎn)是測試中的單元126A是在開發(fā)環(huán)境130內(nèi)執(zhí)行的。如果測試中的單元126A請求來自主機(jī)環(huán)境120的上下文信息,則該信息在測試期間不可得到。對(duì)測試中的單元126A中訪問或依靠來自主機(jī)環(huán)境120的上下文信息的部分實(shí)行測試的任何測試中的單元126A的測試都很可能失敗。測試的失敗是因?yàn)闇y試中的單元返回了一個(gè)不正確的結(jié)果或者是因?yàn)樵跊]有上下文信息的情況下測試中的單元不能夠操作。
此外,圖1B的方法也不能在運(yùn)行時(shí)間建立待測碼的情況下使用。例如ASP.NET是允許在運(yùn)行時(shí)間定義被創(chuàng)建代碼的條件的編程環(huán)境。對(duì)于此代碼,直到定義所述代碼之前不能建立測試設(shè)施。
圖2A示出了用于測試執(zhí)行的期望結(jié)構(gòu)。在開發(fā)環(huán)境110中運(yùn)行的代理程序112調(diào)用測試214。測試214訪問在主機(jī)環(huán)境120中運(yùn)行的測試中的單元226。依據(jù)對(duì)其進(jìn)行編程的特定應(yīng)用和語言,測試中的單元226可以是在主機(jī)環(huán)境120中的函數(shù)、進(jìn)程、方法、對(duì)象或在內(nèi)插附件程序或應(yīng)用程序中的其他構(gòu)造中的一個(gè)或組合。
圖2B示出了一個(gè)另外的實(shí)施例。在圖2B的實(shí)施例中,測試214是在主機(jī)環(huán)境120中執(zhí)行的,并且與開發(fā)環(huán)境110中的代理程序112通信。在此實(shí)施例中,測試214也可以直接訪問來自主機(jī)環(huán)境120的上下文信息。
在圖2A和2B中示出的配置允許測試中的單元226在其主機(jī)環(huán)境內(nèi)被測試。如果測試中的單元226依靠主機(jī)環(huán)境120內(nèi)的任何屬性、變量或其他參數(shù),則在其被測試時(shí)將訪問這些屬性、變量或其他參數(shù)。同樣地,如果測試中的單元226的操作依靠主機(jī)環(huán)境120內(nèi)執(zhí)行的任何初始化,則在測試之前就會(huì)初始化主機(jī)環(huán)境內(nèi)的測試中的單元226。與現(xiàn)有測試結(jié)構(gòu)相比較,由圖2A或2B結(jié)構(gòu)指導(dǎo)的測試會(huì)更為精確地表示實(shí)際的操作狀態(tài)并且在其努力實(shí)行測試中的單元226內(nèi)依賴主機(jī)環(huán)境120的某些參數(shù)的部分代碼時(shí)更不容易失敗或產(chǎn)生異常狀態(tài)。
在某些環(huán)境中可以增強(qiáng)在圖2A或2B中示出的結(jié)構(gòu),諸如當(dāng)測試中的單元226包括非公共接口時(shí)。在此使用的術(shù)語“非公共”接口意味著從在使用編程語言的標(biāo)準(zhǔn)特性定義接口的程序區(qū)域之外的代碼的編程語言標(biāo)準(zhǔn)特性無法訪問的接口。這些“非公共”接口的實(shí)例是稱為“內(nèi)部的”、“受保護(hù)的”或“專用的”那些接口。例如在某些編程語言中在“項(xiàng)目”中創(chuàng)建的接口。參考在另一項(xiàng)目中的一個(gè)項(xiàng)目允許一個(gè)項(xiàng)目中的公共接口用于另一項(xiàng)目,但是非公共接口僅在它們被定義的項(xiàng)目中可用。
當(dāng)動(dòng)態(tài)地示例、編譯測試中的單元226時(shí)或者發(fā)起在編譯或生成測試214時(shí)該測試中的單元226不可用的情況下,希望有另外的組件。在這些情況下的增強(qiáng)允許開發(fā)環(huán)境110內(nèi)諸如那些包括了智能感知特性的工具正確地顯示涉及測試所需的上下文敏感信息,而所述測試將實(shí)行測試中的單元226即使它們不能直接訪問關(guān)于測試中的單元226的變量、方法或其他測試的信息。
圖3示出了即使在無法直接訪問測試中的單元226的情況下仍允許在其主機(jī)環(huán)境120內(nèi)測試該測試中的單元226的測試體系結(jié)構(gòu)的一個(gè)可選實(shí)施例。圖3的實(shí)施例還證明了在商業(yè)開發(fā)環(huán)境中可能是需要的封裝。例如,封裝允許開發(fā)環(huán)境結(jié)合多個(gè)主機(jī)環(huán)境并結(jié)合僅有一個(gè)相當(dāng)小數(shù)量的附加軟件組件的多個(gè)測試使用來與每個(gè)新的主機(jī)環(huán)境或每一新的測試相接。
在圖3的實(shí)例中,代理程序312在開發(fā)環(huán)境310中運(yùn)行。作為現(xiàn)有技術(shù)中的代理程序312是協(xié)調(diào)測試執(zhí)行,接收測試結(jié)果并且與用戶接口或者報(bào)告或使用測試結(jié)果的程序。在此實(shí)施例中,代理程序312是用C#編程語言編寫的函數(shù),但是也可使用任何合適的編程結(jié)構(gòu)來實(shí)現(xiàn)代理程序。
在示出的實(shí)施例中,代理程序312與測試執(zhí)行填補(bǔ)(shim)314交互。測試執(zhí)行填補(bǔ)314代替由現(xiàn)有技術(shù)中由代理程序調(diào)用的諸如測試適配器113的測試適配器。在測試執(zhí)行填補(bǔ)314的接口與測試適配器113的接口相同的情況下,能夠以現(xiàn)有技術(shù)或以任何其他合適的方式構(gòu)造測試代理程序312。
測試執(zhí)行填補(bǔ)314封裝針對(duì)主機(jī)環(huán)境320的任何接口。在商業(yè)開發(fā)環(huán)境中,開發(fā)系統(tǒng)可以認(rèn)出設(shè)置用于反映主機(jī)環(huán)境320類型的主機(jī)類型屬性。多個(gè)主機(jī)適配器是可用的,以允許使用相同的開發(fā)環(huán)境來準(zhǔn)備用于多個(gè)主機(jī)環(huán)境的測試。例如可以使用相同的開發(fā)環(huán)境來開發(fā)為MicrosoftWord字處理應(yīng)用程序或MicrosoftExcel電子表格應(yīng)用程序準(zhǔn)備的內(nèi)插附件程序的測試。在此所述的實(shí)施例中,每一主機(jī)類型可具有一測試執(zhí)行填補(bǔ)。在此實(shí)例中,每一測試執(zhí)行填補(bǔ)都是一組Visual Basic函數(shù),但是也可使用任何合適的編程構(gòu)造來實(shí)現(xiàn)一測試執(zhí)行填補(bǔ)。
測試執(zhí)行填補(bǔ)314為接口的一側(cè)提供在主機(jī)環(huán)境中操作的程序。此時(shí)該接口的相對(duì)側(cè)則由主機(jī)環(huán)境320內(nèi)的主機(jī)適配器322提供。在圖3中示出的通信是經(jīng)過接口122的。更一般的情況是在測試執(zhí)行填補(bǔ)314和主機(jī)適配器322之間的通信可以通過任何合適的通信信道。依據(jù)開發(fā)環(huán)境310和主機(jī)環(huán)境320的指定實(shí)現(xiàn),合適的通信信道的實(shí)例包括共享的存儲(chǔ)器空間、命名管線、RPC接口或COM接口。作為另一個(gè)實(shí)例,可以使用在商業(yè)上可得到的.NET主機(jī)環(huán)境中的“遠(yuǎn)程”構(gòu)造來創(chuàng)建通信信道。
在操作期間,主機(jī)環(huán)境320(或某些內(nèi)插附件程序)認(rèn)出主機(jī)環(huán)境以測試模式操作,并且初始化主機(jī)適配器322。作為初始化主機(jī)適配器322的一部分,到主機(jī)適配器322的接口對(duì)于在開發(fā)環(huán)境中運(yùn)行的程序變得可用。即使是在測試模式下操作,主機(jī)環(huán)境320仍載入并初始化測試中的單元226使得測試中的單元226將存在于所述主機(jī)環(huán)境中。依據(jù)具體的主機(jī)環(huán)境和具體的測試中的單元,主機(jī)環(huán)境320可以初始化也可以不初始化測試模式下的測試中的單元226的執(zhí)行。同樣依據(jù)具體的實(shí)現(xiàn),可由正被執(zhí)行的測試或以任何其他合適的方式調(diào)用測試中的單元的執(zhí)行。
主機(jī)環(huán)境和開發(fā)環(huán)境之間的通信信道允許開發(fā)環(huán)境內(nèi)的代理程序312初始化和控制主機(jī)環(huán)境內(nèi)測試330的執(zhí)行,并且接收來自測試330的執(zhí)行結(jié)果。
主機(jī)適配器322的具體實(shí)現(xiàn)將依賴于主機(jī)環(huán)境320。作為一實(shí)例,在主機(jī)環(huán)境是MicrosoftOffice應(yīng)用程序的情況下,主機(jī)適配器322可以是一組VisualBasic函數(shù)。給予主機(jī)適配器一個(gè)實(shí)例的偽碼可包括在附加在此的計(jì)算機(jī)程序列表中。
在測試模式中放置主機(jī)環(huán)境的機(jī)制還將依賴于開發(fā)環(huán)境的實(shí)現(xiàn)。在ASP.NET主機(jī)環(huán)境的一個(gè)實(shí)例中,測試的執(zhí)行涉及HTTP模塊的使用。測試執(zhí)行填補(bǔ)314能夠觸發(fā)對(duì)包括指定了要進(jìn)入的測試模式的首部的一HTTP請求的發(fā)送。該請求還可以表示要測試的單元。不考慮用于初始化測試模式的具體機(jī)制,仍在主機(jī)環(huán)境320中初始化測試中的單元226。
主機(jī)適配器322調(diào)用特定的測試330。為了進(jìn)一步的抽象,主機(jī)適配器322可以通過測試適配器(圖3中未示出)訪問特定的測試方法。每個(gè)測試都具有其自身的測試適配器,而所有的測試適配器都表示了連接至主機(jī)適配器322的一個(gè)公共接口。以此方式,對(duì)一個(gè)主機(jī)環(huán)境僅請求單個(gè)主機(jī)適配器322,但是可在主機(jī)環(huán)境內(nèi)可調(diào)用任何數(shù)量的測試。諸如在測試執(zhí)行時(shí)提供給該測試的參數(shù)數(shù)量和類型的每一測試的具體要求可以封裝在所述測試適配器內(nèi)。
一旦被調(diào)用,測試330就與測試中的單元226交互以激勵(lì)該測試中的單元并且觀察其對(duì)激勵(lì)的響應(yīng)。依據(jù)特定的測試中的單元結(jié)構(gòu)和功能以及被執(zhí)行測試的特性而對(duì)測試中的單元226提供各種形式的激勵(lì)是可能的。例如,測試可以通過調(diào)用該單元的方法并且提供作為方法調(diào)用內(nèi)自變量的預(yù)定值來為測試中的單元提供激勵(lì)。
在圖3的實(shí)施例中,測試330通過存取程序(accessor)訪問測試中的單元226。存取程序是使用反映來確定一單元的方法、屬性、類或其他參數(shù)的程序。可通過將存取程序類稍后綁定到測試中的單元226來創(chuàng)建存取程序。在使用存取程序類時(shí),測試開發(fā)人員可以編寫測試中的單元諸如參考所述存取程序類的測試330的測試程序而不必知道所述測試中的單元細(xì)節(jié)。
通過稍后綁定有存取程序類來創(chuàng)建存取程序的一種方法是通過“反映”的使用。“反映”是允許單元讀取保持關(guān)于其方法、屬性、類或其他參數(shù)的信息的數(shù)據(jù)結(jié)構(gòu)的許多編程語言的一種特征。可以使用反映信息來示例存取程序332以使其能夠訪問作為測試目標(biāo)的特定測試中的單元226。
在動(dòng)態(tài)地示例測試中的單元226處通過稍后綁定存取程序332特別有用測試中的單元。因?yàn)榧词乖谑纠郎y試中的單元226之前存取程序332就可用,所以訪問測試中的單元226所需的信息在開發(fā)環(huán)境310內(nèi)可用,就使得諸如智能感知的特性可以具有對(duì)具有開發(fā)測試或測試中的單元226的程序的上下文敏感信息所需的信息。以此方式,可以使用通常設(shè)計(jì)代碼可用的全部工具來準(zhǔn)備測試330。
沒有必要使用分開的存取程序來接收由測試中的單元226反映的信息。作為一個(gè)可選實(shí)施例的實(shí)例,可將相同的功能并入測試330。
在測試330生成結(jié)果時(shí),這些結(jié)果可被返回給代理程序312。該結(jié)果可以通過主機(jī)適配器322返回。另外也可將該結(jié)果直接傳送給開發(fā)環(huán)境。例如,代理程序312或測試執(zhí)行填補(bǔ)314可以包括公共接口。因?yàn)槭窃诖沓绦?12或測試執(zhí)行填補(bǔ)314之后在開發(fā)環(huán)境內(nèi)準(zhǔn)備測試330,所以代理程序312或測試執(zhí)行填補(bǔ)314的接口對(duì)于測試330可用。
圖3是響應(yīng)于由開發(fā)環(huán)境310內(nèi)的代理程序執(zhí)行的命令而在主機(jī)環(huán)境320內(nèi)初始化和運(yùn)行的測試中的單元226的一般表示。該一般表示包括即使在不知道或?qū)υ摐y試在編譯時(shí)間不可用的待測的具體代碼時(shí)仍舊允許在一開發(fā)環(huán)境中開發(fā)測試的特性??梢杂门c所述開發(fā)環(huán)境和主機(jī)環(huán)境相兼容的任何合適的方式來實(shí)現(xiàn)這一測試體系結(jié)構(gòu)。
圖4是一過程圖解,通過該過程可在表示為ASP.NET環(huán)境的主機(jī)環(huán)境中執(zhí)行在開發(fā)環(huán)境中準(zhǔn)備的測試。以此方式進(jìn)行的測試可以驗(yàn)證實(shí)現(xiàn)一網(wǎng)站的應(yīng)用程序的操作。在所述的實(shí)施例中,開發(fā)環(huán)境可以訪問用于待測網(wǎng)站的web.config文件以方便所述的接口。
在設(shè)計(jì)了一個(gè)或多個(gè)測試之后,用戶可以通過開發(fā)環(huán)境310中的命令行界面調(diào)用一測試。在圖4的實(shí)例中,運(yùn)行一測試引發(fā)代理程序410在開發(fā)環(huán)境310內(nèi)的運(yùn)行并且控制該測試的執(zhí)行。在此實(shí)施例中,代理程序410可以是由C#語言編寫的程序。它可以在用于創(chuàng)建被執(zhí)行測試的相同開發(fā)環(huán)境中運(yùn)行或者可以在一個(gè)完全分開的開發(fā)環(huán)境內(nèi)運(yùn)行,甚至可以在一臺(tái)不同的計(jì)算機(jī)上運(yùn)行。
為了測試在特定主機(jī)環(huán)境內(nèi)的單元,代理程序410示例一個(gè)適于與該主機(jī)環(huán)境接口的測試執(zhí)行填補(bǔ)412。在此實(shí)例中,測試執(zhí)行填補(bǔ)412包括與ASP.NET主機(jī)環(huán)境的接口。開發(fā)環(huán)境可以包括用于每個(gè)待執(zhí)行測試的多個(gè)測試執(zhí)行填補(bǔ)。每個(gè)測試執(zhí)行填補(bǔ)都可作為不同主機(jī)環(huán)境的主機(jī)適配器。
在所述的實(shí)施例中,所述測試執(zhí)行填補(bǔ)不必考慮與其交互的具體主機(jī)環(huán)境,就能夠具有預(yù)定格式的一接口432。以此方式,代理程序410可與任何測試執(zhí)行填補(bǔ)通信。每個(gè)測試都具有分開的測試執(zhí)行填補(bǔ)412以致于可以為代理程序410提供一接口,通過該接口就能夠訪問任何期望的測試。測試執(zhí)行填補(bǔ)412發(fā)送訪問包含有測試中的單元的主機(jī)環(huán)境320中的應(yīng)用程序的命令。在主機(jī)環(huán)境是ASP.NET環(huán)境的示出實(shí)施例中,通過發(fā)出HTTP請求做出訪問。HTTP請求指定將被測試的程序或程序?qū)ο?。在此?shí)例中,該程序?qū)ο笫怯蒛RL識(shí)別的頁面。HTTP請求指明了在測試模式下應(yīng)被調(diào)用的主機(jī)環(huán)境以及作為該測試目標(biāo)的指定的URL。
主機(jī)環(huán)境320響應(yīng)由測試執(zhí)行填補(bǔ)412發(fā)送的請求。響應(yīng)于一請求,就調(diào)用HTTP模塊450。由模塊450表示的具體的HTTP模塊可以響應(yīng)于來自測試執(zhí)行填補(bǔ)412的請求被具體地創(chuàng)建。如果先前響應(yīng)于一請求被調(diào)用的模塊已損壞,就可使用一新模塊。然而要是未使用的模塊沒有損壞,那么也可以使用該模塊處理所述請求。在ASP.NET主機(jī)環(huán)境中能夠重新使用HTTP模塊是因?yàn)锳SP.NET的無狀態(tài)特性。其他主機(jī)環(huán)境的操作可能有所不同。HTTP模塊450的具體格式和創(chuàng)建方法依靠主機(jī)環(huán)境320的實(shí)現(xiàn)并且可以使用響應(yīng)于測試請求的任何合適的方式。
響應(yīng)于來自測試執(zhí)行填補(bǔ)412的請求,HTTP模塊450根據(jù)主機(jī)環(huán)境內(nèi)的正常處理來初始化目標(biāo)頁面。以此方式就可由主機(jī)環(huán)境正確地初始化該測試中的單元并使其準(zhǔn)備好接收測試。在此實(shí)例中,目標(biāo)頁面示出作為測試中的單元460。此外。HTTP模塊450載入主機(jī)適配器454并且使用測試執(zhí)行填補(bǔ)412對(duì)其進(jìn)行注冊,從而將送入主機(jī)適配器454的接口展現(xiàn)給測試執(zhí)行填補(bǔ)412。
主機(jī)適配器454提供到主機(jī)環(huán)境310的接口。在圖4的實(shí)例中,主機(jī)適配器454是以C#函數(shù)來實(shí)現(xiàn)的。
主機(jī)適配器454具有可由在開發(fā)環(huán)境中執(zhí)行的程序來訪問的接口480。在主機(jī)環(huán)境320是由ASP.NET提供的所示實(shí)施例中,可以通過允許一個(gè)程序用另一個(gè)程序注冊的.NET遠(yuǎn)程構(gòu)造來展現(xiàn)接入旨在由其他環(huán)境內(nèi)程序訪問的一個(gè)軟件程序的接口。在此,請求與主機(jī)適配器454接口的信息能夠使用.NET注冊命令的接口436而對(duì)測試執(zhí)行填補(bǔ)412可用。
一旦接口480用測試執(zhí)行填補(bǔ)412注冊,測試執(zhí)行填補(bǔ)412就可通過接口480與主機(jī)適配器454通信。通過接口480,測試執(zhí)行填補(bǔ)412可以請求關(guān)于用于執(zhí)行指定測試的主機(jī)適配器454的信息??梢允褂萌魏魏线m的命令來獲取信息,但在此實(shí)例中使用的是接口480上的方法。由此測試執(zhí)行填補(bǔ)412可以獲得對(duì)測試適配器456的接口482的訪問權(quán)。在此實(shí)施例中,測試適配器456是為在主機(jī)環(huán)境內(nèi)執(zhí)行的所有測試提供一致接口的包裝。測試適配器456可以作為C#函數(shù)或者以任何其他合適的方式實(shí)現(xiàn)。
測試適配器456創(chuàng)建一個(gè)單元測試適配器458的范例,其中所述單元測試適配器458是針對(duì)在測試中的單元460上執(zhí)行的具體測試416。單元測試適配器458可以作為C#函數(shù)或者以任何其他合適的方式實(shí)現(xiàn)。測試適配器456可被認(rèn)為是用于單元測試適配器458的存取程序。單元測試適配器458可以通過調(diào)用在運(yùn)行時(shí)間內(nèi)確定的具體測試416而稍后綁定到具體的測試中的單元。稍后綁定所需的信息可從測試416通過反映或其他任何合適的方式導(dǎo)出。
單元測試適配器458包括接口484,通過該接口能夠與測試適配器456通信。因?yàn)樵陂_發(fā)環(huán)境310中執(zhí)行的程序能夠通過展現(xiàn)接口482通信,所有無需在開發(fā)環(huán)境310中展現(xiàn)接口484。
單元測試適配器458調(diào)用測試416,允許測試416在主機(jī)環(huán)境320內(nèi)執(zhí)行。作為替代,可將測試功能直接并入單元測試適配器458。
一旦被載入并恰當(dāng)配置,就可執(zhí)行測試416。測試416可以是在能由單元測試適配器458載入并運(yùn)行的DLL模塊內(nèi),但是也可使用任何合適的形式??梢酝ㄟ^在開發(fā)環(huán)境310和主機(jī)環(huán)境320之間被建立的接口來提供具體的命令和上下文數(shù)據(jù)。所得結(jié)果可以通過接口430送回代理程序410。
在開發(fā)環(huán)境和主機(jī)環(huán)境內(nèi)的測試中的單元之間提供接口的具體方法可依賴于該主機(jī)環(huán)境的細(xì)節(jié)而變化。例如當(dāng)主機(jī)環(huán)境是MicrosoftOffice應(yīng)用程序套件內(nèi)的應(yīng)用程序時(shí),不是指定一網(wǎng)頁作為測試目標(biāo),而是在開發(fā)環(huán)境內(nèi)由測試適配器發(fā)送的測試請求可以指定包括了所述測試中的單元的特定文檔。
執(zhí)行單個(gè)測試的步驟以其出現(xiàn)在一個(gè)實(shí)例中的次序用數(shù)字1,2……9編號(hào)。步驟1表示代理程序410與測試執(zhí)行填補(bǔ)412通信。步驟2表示測試執(zhí)行填補(bǔ)412發(fā)送測試請求給主機(jī)環(huán)境320。步驟3表示HTTP模塊450注冊主機(jī)適配器454的接口。步驟4示出了在測試執(zhí)行填補(bǔ)412和主機(jī)適配器454之間的信息交換以允許測試執(zhí)行填補(bǔ)412提供接口482與測試適配器456通信。步驟5表示在測試執(zhí)行填補(bǔ)412和測試適配器456之間通信執(zhí)行一測試所必需的信息。步驟6表示了在運(yùn)行測試的過程中在測試適配器456和單元測試適配器458之間的通信。步驟7表示了在單元測試適配器458和測試416之間的通信。測試416可以包括關(guān)于其應(yīng)該如何被配置的數(shù)據(jù)。此外在執(zhí)行測試的過程期間能夠交換數(shù)據(jù)。步驟8表示了由單元測試適配器458從測試中的單元460中獲取的為配置測試目標(biāo)測試中的單元460所必需的信息。步驟9示出了在開發(fā)環(huán)境內(nèi)把測試結(jié)果發(fā)送回代理程序410。將各步驟編號(hào)以提供在單個(gè)測試執(zhí)行期間數(shù)據(jù)和控制的流程的實(shí)例。在實(shí)際實(shí)現(xiàn)中,這些步驟無需以示出的次序?qū)崿F(xiàn)。此外,每一步驟不必只出現(xiàn)一次。例如測試適配器414可以在多個(gè)實(shí)例中發(fā)送命令或數(shù)據(jù)給測試適配器456。
圖4示出了單個(gè)測試416的執(zhí)行。在測試實(shí)際的應(yīng)用程序中,也可在一測試運(yùn)行內(nèi)執(zhí)行多個(gè)測試。代理程序410同樣能夠在測試運(yùn)行內(nèi)控制多個(gè)測試的調(diào)用。在測試運(yùn)行內(nèi)的每個(gè)測試都可利用其本身的測試執(zhí)行填補(bǔ)412。可以在代理程序410內(nèi)提供可應(yīng)用于整個(gè)測試運(yùn)行的屬性或其他設(shè)置??梢酝ㄟ^測試執(zhí)行填補(bǔ)412或者通過單元測試適配器458或者提供測試416來應(yīng)用適用于單個(gè)測試的屬性或其他設(shè)置。
例如,無需為每個(gè)測試指定用于測試的一個(gè)完整的URL。而可在測試環(huán)境中一次指定諸如指定特定機(jī)器的部分的URL的某個(gè)部分。對(duì)URL的所有后續(xù)參考都可指該機(jī)器。例如可以為要執(zhí)行的每個(gè)單元測試指定一個(gè)機(jī)器無關(guān)的片段,諸如指定特定頁面的那部分。
圖5示出了使用上述軟件配置可能得到的開發(fā)環(huán)境的附加方面。圖5示出了接入到諸如可由程序員用于在開發(fā)環(huán)境310中開發(fā)測試的測試編輯器的界面500。界面500在程序員編寫測試程序時(shí)顯示諸如語句510的程序語句。
界面500還包括在此作為彈出窗口示出的輔助顯示區(qū)512。輔助顯示區(qū)可用于顯示與用戶編寫測試程序時(shí)相關(guān)的信息。在此實(shí)例中,輔助顯示區(qū)512顯示了關(guān)于用于訪問作為該測試程序目標(biāo)的測試中的單元的存取程序的信息。
即使在編寫測試時(shí)沒有定義測試中的單元,訪問它所需的信息也能如圖5所示通過存取程序得到。由此也可在開發(fā)環(huán)境中操作諸如智能感知的特性。
在示出的實(shí)施例中,顯示的具體信息依賴于上下文。在圖5中描繪的實(shí)例里,用戶已輸入了指令510的一部分。指令510包括對(duì)用于訪問的測試中的單元的代碼存取程序內(nèi)一變量的部分參考。指令的該部分足以識(shí)別已輸入的哪些需要通過在代碼存取程序內(nèi)定義的變量名來完成。因此彈出窗口512包括在代碼存取程序內(nèi)定義的變量名列表。代替輸入完整的變量名,用戶可以從彈出窗口512中選擇所需變量。從列表中選擇條目比要求用戶鍵入該條目的完整標(biāo)識(shí)符更為簡單并且更不容易出錯(cuò)。
本方法不限于簡單地顯示變量名。每當(dāng)與其他上下文信息相結(jié)合的部分指令提供了識(shí)別該組選擇的足夠信息時(shí)可以呈現(xiàn)一組選擇列表??梢詫?duì)能夠在程序中使用的函數(shù)、界面或其他結(jié)構(gòu)使用本方法??梢匀绗F(xiàn)有技術(shù)那樣執(zhí)行該選擇的組的識(shí)別和顯示。在主機(jī)環(huán)境中執(zhí)行測試中的單元的方法與存取程序的使用兼容以使得為創(chuàng)建圖5中顯示類型信息所必需的信息可用。
已經(jīng)討論了本發(fā)明至少一個(gè)實(shí)施例的若干方面,應(yīng)該認(rèn)識(shí)到本領(lǐng)域普通技術(shù)人員能夠輕易獲取各種改變、修改和改進(jìn)。
例如,以上討論的軟件體系結(jié)構(gòu)無需依賴其中執(zhí)行主機(jī)環(huán)境和開發(fā)環(huán)境的具體硬件體系結(jié)構(gòu)。主機(jī)環(huán)境和開發(fā)環(huán)境能夠在同一單處理器或多處理器系統(tǒng)上執(zhí)行。“遠(yuǎn)程”可以位于通過在一臺(tái)計(jì)算機(jī)上運(yùn)行的不同主機(jī)應(yīng)用程序所創(chuàng)建的不同環(huán)境之間并且無需是在分開物理位置內(nèi)的計(jì)算機(jī)、服務(wù)器或其他處理器上執(zhí)行的進(jìn)程之間。
而且,諸如圖2到圖4的附圖示出了在開發(fā)環(huán)境或主機(jī)環(huán)境內(nèi)執(zhí)行的軟件組件。如果一個(gè)測試具有在該主機(jī)環(huán)境內(nèi)可用的方法、屬性或其他上下文信息的訪問就可認(rèn)為在該環(huán)境中執(zhí)行了該測試。用于創(chuàng)建或調(diào)用一程序的應(yīng)用程序無需支配該程序執(zhí)行的環(huán)境。
此外,其上執(zhí)行一程序的硬件無需決定其執(zhí)行環(huán)境。作為一個(gè)具體的實(shí)例,當(dāng)希望測試用于諸如PDA或靈巧電話機(jī)的便攜電子設(shè)備的應(yīng)用程序時(shí),可以希望將主機(jī)環(huán)境看做是一個(gè)分開的遠(yuǎn)程平臺(tái),在其中在主機(jī)和開發(fā)環(huán)境之間的所有交互都是通過.NET遠(yuǎn)程進(jìn)行的。另外還希望將所有或部分的代理程序或測試程序載入便攜電子設(shè)備用于執(zhí)行。
在此使用時(shí),希望通常在測試中的單元內(nèi)非公開的方法和變量能夠通過存取程序得到反映。更一般地,可以反映測試中的單元的任何參數(shù)。通過存取程序反映出的參數(shù)性質(zhì)或類型可以基于其中準(zhǔn)備的特定測試中的單元或編程語言而變化。
對(duì)測試結(jié)果作出的使用并不是對(duì)本發(fā)明的限制。測試結(jié)果可以提供關(guān)于測試中的單元的性能的某些方面的數(shù)據(jù)。性能信息的具體類型將依賴于具體的測試程序。性能信息能夠指示該單元是否提供了期望的操作結(jié)果。另外它還能夠提供關(guān)于單元的執(zhí)行時(shí)間或者在測試執(zhí)行期間使用的處理源的信息。
作為另一個(gè)實(shí)例,也可改變訪問測試中的單元的具體方法。不要求使用抽象。另外還可使用更多的抽象級(jí)別。作為一實(shí)例,圖4示出了測試適配器456通過單元測試適配器458訪問測試416。還能夠提供附加的抽象級(jí)別,諸如通過提供環(huán)繞測試416的包裝。另外還可以使用更少的抽象級(jí)別,諸如通過讓測試適配器456直接訪問測試416。
通常,在圖中示出的含有分開模塊的程序?yàn)楹唵纹鹨娛且源朔绞绞境龅摹S啥鄠€(gè)塊示出的函數(shù)可以組合成為單個(gè)函數(shù)、網(wǎng)頁或其他程序元素。另外示出在單個(gè)塊內(nèi)執(zhí)行的函數(shù)能夠在多個(gè)程序元素中實(shí)現(xiàn)。在上述一個(gè)塊的函數(shù)在多個(gè)程序元素中實(shí)現(xiàn)的情況下,這些程序元素能夠聚集看成單個(gè)功能塊而被查看。相反地,當(dāng)一個(gè)程序元素實(shí)現(xiàn)了示出作為多個(gè)塊的功能時(shí),就可認(rèn)為該模塊是任何或所有功能塊的實(shí)現(xiàn)。
這些改變、修改和改進(jìn)旨在成為本公開的一部分,并且位于本發(fā)明的精神和范圍之內(nèi)。因此在前的描述和附圖僅出于實(shí)例的目的。
能夠以任意多種方式實(shí)現(xiàn)本發(fā)明的上述實(shí)施例。例如可以使用硬件、軟件或它們的組合來實(shí)現(xiàn)這些實(shí)施例。當(dāng)以軟件實(shí)現(xiàn)時(shí),可以在單個(gè)計(jì)算機(jī)內(nèi)提供的或是在多個(gè)計(jì)算機(jī)中分布的任何合適的處理器或處理器集合上執(zhí)行軟件代碼。
同樣在此概述的各種方法或過程也可編碼成在使用各種操作系統(tǒng)或平臺(tái)中的任何一種的一個(gè)或多個(gè)處理器上可執(zhí)行的軟件。此外,可以使用若干合適的編程語言和/或傳統(tǒng)的編程或腳本工具的任一種來編寫該軟件,并可將該軟件編譯成可執(zhí)行機(jī)器語言代碼。
在此方面,本發(fā)明的一個(gè)實(shí)施例針對(duì)帶有一個(gè)或多個(gè)編碼程序的計(jì)算機(jī)可讀介質(zhì)(或多個(gè)計(jì)算機(jī)可讀介質(zhì))(例如計(jì)算機(jī)存儲(chǔ)器、一個(gè)或多個(gè)軟盤、致密盤、光盤、磁帶等),當(dāng)這些程序在一個(gè)或多個(gè)計(jì)算機(jī)或其他處理器上執(zhí)行時(shí),就可執(zhí)行實(shí)現(xiàn)了上述本發(fā)明各實(shí)施例的方法。計(jì)算機(jī)可讀介質(zhì)可以是便攜的,以使得存儲(chǔ)其上的程序可被載入一個(gè)或多個(gè)不同的計(jì)算機(jī)或其他處理器,以如上討論地本發(fā)明實(shí)現(xiàn)的各個(gè)方面。
在此使用的術(shù)語“程序”在一般意義上指的是可用于編程計(jì)算機(jī)或其他處理器以實(shí)現(xiàn)上述本發(fā)明各個(gè)方面的任何類型的計(jì)算機(jī)代碼或指令集。此外還應(yīng)認(rèn)識(shí)到,根據(jù)此實(shí)施例的一個(gè)方面,在執(zhí)行時(shí)用于實(shí)現(xiàn)本發(fā)明方法的一個(gè)或多個(gè)計(jì)算機(jī)程序不必位于單個(gè)計(jì)算機(jī)或處理器上,而是能夠以模塊化的形式分布在多個(gè)不同的計(jì)算機(jī)或處理器中以實(shí)現(xiàn)本發(fā)明的各個(gè)方面。
也是以其通常的意義來使用諸如“參數(shù)”、“對(duì)象”和“方法”的術(shù)語。雖然某些編程語言定義“參數(shù)”與將值送入函數(shù)相關(guān),但在此使用的術(shù)語更一般地指任何信息片段。同樣地,某些編程語言使用諸如“對(duì)象”和“方法”的術(shù)語來指特定的編程構(gòu)造。除非明確指出,否則在此使用的這些術(shù)語不僅限于這些構(gòu)造。
可以單獨(dú)、組合地或以未在前述實(shí)施例中特別討論的各種排列來使用本發(fā)明的各個(gè)方面,因此本發(fā)明各方面的應(yīng)用就不限于在前的描述或示出的附圖中所闡述的組件的細(xì)節(jié)和排列。例如,在一個(gè)實(shí)施例中描述的各個(gè)方面能夠與在其他實(shí)施例中描述的各個(gè)方面以任何方式組合。
在權(quán)利要求中使用諸如“第一”、“第二”、“第三”等等的序數(shù)術(shù)語來修飾的聲明要素本身并不意味著任何優(yōu)先權(quán)、優(yōu)越性,也不意味著一個(gè)聲明要素的次序先于另一個(gè),或者在執(zhí)行一方法中諸動(dòng)作的時(shí)間上的次序,而僅僅是標(biāo)記用于區(qū)別具有一指定名的聲明要素和具有相同名(但用序數(shù)術(shù)語)的另一個(gè)要素,從而辨別聲明的要素。
同樣地,在此使用的措辭和術(shù)語僅出于描述的目的并且不應(yīng)被認(rèn)為具有任何限制的意義?!鞍ā?、“包含”或者“具有”、“含有”、“帶有”以及它們在此的變化的使用意味著包括了其后列出的項(xiàng)和其等效物以及附加的項(xiàng)。
計(jì)算機(jī)程序列表如下是配置成在ASP.NET上運(yùn)行的測試樣本。
[HostType(“ASP.NET”)][WebServerType(WebServerType.WebDev)][UrlToTest(“http//localhost/website/default.aspx”)][PathToWeb(@”c\websites\website”)] public void Test(){System.Web.UI.Page page=TestContext.RequestedPage;Assert.IsNotNull(page,“RequestedPage should not be null.”);PageAccessor accessor=new PageAccessor(page);int result=accessor.Add(1,1);Assert.AreEqual(2,result,“1+1 should equal 2”);}如下是用于實(shí)現(xiàn)主機(jī)適配器的偽代碼實(shí)例。void RunTest(ITest test,IResults results){//Get the target process-specific contextITestContext testContext=GetTargetProcessContext();//Load the appropriate test execution adapterITestAdapter testAdapter=LoadTestAdapter(test);//Execute the testtestAdapter.Run(test,testContext);//Feed results back to the test execution shimresults.AddResults(testAdapter.Results);}測試執(zhí)行填補(bǔ)可以通過如下形式的接口與該主機(jī)適配器通信interface ITestExecution{void Initialize();void Run(ITest test);void CleanUp();}如下是在該類稍后綁定到所述測試中的單元時(shí)用于創(chuàng)建存取程序的簡單存取程序類定義的實(shí)例public class CodeAccessor{public CodeAccessor(PrivateObject privateObject){m_privateObject=privateObject;}public int Add(int x,int y){object[]args=new object[]{x,y};int ret=((int)(m_privateObject.Invoke(″Add″,new System.Type[]{typeof(int),typeof(int)},args)));return ret;}}
權(quán)利要求
1.一種測試在第一環(huán)境內(nèi)運(yùn)行的程序的方法,所述程序具有多個(gè)單元,包括至少一個(gè)測試中的單元,所述方法包括a)在第二環(huán)境內(nèi)執(zhí)行測試代理程序,所述測試代理程序指定要被執(zhí)行來測試至少一個(gè)測試中的單元的測試;b)響應(yīng)于執(zhí)行所述測試代理程序,在所述第一環(huán)境內(nèi)執(zhí)行一指定測試,所述測試生成表示所述測試中的單元的性能特征的測試結(jié)果。
2.如權(quán)利要求1所述的方法,其特征在于,還包括把來自在所述第一環(huán)境內(nèi)執(zhí)行的所述指定測試的測試結(jié)果傳遞至在所述第二環(huán)境中執(zhí)行的所述測試代理程序。
3.如權(quán)利要求2所述的方法,其特征在于,在所述第一環(huán)境中執(zhí)行一指定測試包括在所述第一環(huán)境內(nèi)創(chuàng)建一對(duì)象并且向所述第二環(huán)境內(nèi)的一對(duì)象注冊所述對(duì)象。
4.如權(quán)利要求3所述的方法,其特征在于,執(zhí)行一指定測試還包括a)在所述第一環(huán)境中執(zhí)行一測試對(duì)象;以及b)通過在所述第一環(huán)境內(nèi)的所述對(duì)象而在所述第二環(huán)境內(nèi)的所述對(duì)象和所述測試對(duì)象之間通信。
5.如權(quán)利要求2所述的方法,其特征在于,執(zhí)行一指定測試包括在所述第一環(huán)境內(nèi)執(zhí)行一測試適配器,并且使用所述測試適配器調(diào)用所述指定測試。
6.如權(quán)利要求5所述的方法,其特征在于,執(zhí)行一指定測試還包括用所述測試適配器接收一表示了所述指定測試的參數(shù)并且調(diào)用響應(yīng)于該參數(shù)選擇的測試。
7.如權(quán)利要求5所述的方法,其特征在于,所述第一環(huán)境包括一可擴(kuò)展接口,并且執(zhí)行一測試適配器包括響應(yīng)于通過該可擴(kuò)展接口提供的命令而在所述第一環(huán)境內(nèi)執(zhí)行一測試適配器。
8.如權(quán)利要求1所述的方法,其特征在于,所述測試中的單元具有一非公共接口,并且執(zhí)行一指定測試包括通過它的非公共接口實(shí)行所述測試中的單元。
9.一種測試在第一環(huán)境內(nèi)運(yùn)行的程序的方法,所述程序具有多個(gè)單元,至少一個(gè)所述單元是測試中的單元,所述方法包括a)在所述第一環(huán)境內(nèi)載入所述程序;b)展現(xiàn)所述第一環(huán)境內(nèi)的一對(duì)象的接口;c)響應(yīng)于通過所述接口提供的信息而使用所述對(duì)象載入一測試適配器;以及d)使用所述測試適配器來執(zhí)行至少一個(gè)測試中的單元的測試。
10.如權(quán)利要求9所述的方法,其特征在于,還包括響應(yīng)于在第二環(huán)境中執(zhí)行的測試代理程序的執(zhí)行通過所述接口提供信息。
11.如權(quán)利要求10所述的方法,其特征在于,響應(yīng)于在第二環(huán)境中測試代理程序的執(zhí)行提供信息包括在開發(fā)環(huán)境內(nèi)執(zhí)行所述測試代理程序。
12.如權(quán)利要求10所述的方法,其特征在于,響應(yīng)于在第二環(huán)境中執(zhí)行的測試代理程序的執(zhí)行通過所述接口提供信息包括基于所述第一環(huán)境的屬性選擇一測試執(zhí)行填補(bǔ),并且通過該測試執(zhí)行填補(bǔ)訪問所述接口。
13.如權(quán)利要求9所述的方法,其特征在于,還包括將所述第一環(huán)境置于測試模式下。
14.如權(quán)利要求9所述的方法,其特征在于,在所述第一環(huán)境中載入所述程序包括使用一應(yīng)用程序載入一內(nèi)插附件程序。
15.如權(quán)利要求10所述的方法,其特征在于,所述第一環(huán)境是在第一進(jìn)程中創(chuàng)建的,而所述第二環(huán)境是在第二進(jìn)程中創(chuàng)建。
16.如權(quán)利要求9所述的方法,其特征在于,還包括a)反映所述第一環(huán)境中一單元的參數(shù);以及b)使用所反映的參數(shù)來配置所述測試適配器。
17.一種具有用于執(zhí)行實(shí)現(xiàn)一軟件系統(tǒng)的各個(gè)步驟的計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀介質(zhì),所述軟件系統(tǒng)提供一開發(fā)環(huán)境,在其中能夠開發(fā)測試程序用于測試在多個(gè)主機(jī)環(huán)境之一內(nèi)運(yùn)行的程序單元,所述計(jì)算機(jī)可執(zhí)行指令執(zhí)行如下步驟a)創(chuàng)建一測試代理程序;以及b)創(chuàng)建多個(gè)主機(jī)適配器中的一個(gè),每個(gè)主機(jī)適配器被配置成由所述測試代理程序用來調(diào)用在所述多個(gè)主機(jī)環(huán)境之一內(nèi)的測試程序的執(zhí)行。
18.如權(quán)利要求17所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述軟件系統(tǒng)還包括用于執(zhí)行如下步驟的計(jì)算機(jī)可執(zhí)行指令a)接收來自用戶的指定了測試程序中部分指令的輸入;以及b)響應(yīng)于來自用戶的所述輸入選擇性地顯示關(guān)于參數(shù)的上下文敏感信息,所述參數(shù)可在所述測試程序的指令中使用以訪問所述程序的單元。
19.如權(quán)利要求18所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述軟件系統(tǒng)還包括用于實(shí)現(xiàn)接收參數(shù)的各步驟的計(jì)算機(jī)可執(zhí)行指令,其中所述參數(shù)涉及從所述單元中反映出的所述程序單元。
20.如權(quán)利要求17所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述軟件系統(tǒng)還包括用于創(chuàng)建一對(duì)象的計(jì)算機(jī)可執(zhí)行指令,其中所述對(duì)象基于關(guān)于從所述單元中反映的所述程序單元的信息來配置一測試程序。
全文摘要
一種在其中準(zhǔn)備了單元測試的開發(fā)環(huán)境。所述單元測試在主機(jī)環(huán)境中運(yùn)行以實(shí)現(xiàn)更為完全和精確的程序單元測試。開發(fā)環(huán)境使用一測試執(zhí)行填補(bǔ)來訪問在主機(jī)環(huán)境內(nèi)運(yùn)行的適配器。該主機(jī)適配器可以調(diào)用運(yùn)行指定測試的其他程序?qū)ο蟆_@些對(duì)象可以稍后綁定至所述測試中的單元。存取程序類能夠促進(jìn)對(duì)指定測試中的單元的稍后綁定同時(shí)允許在開發(fā)環(huán)境內(nèi)編寫測試,以使用訪問測試中的單元所需的上下文敏感信息。
文檔編號(hào)G06F11/36GK1838089SQ200610009309
公開日2006年9月27日 申請日期2006年2月23日 優(yōu)先權(quán)日2005年3月23日
發(fā)明者B·R·克勞福德 申請人:微軟公司