[發明專利]用于單元測試的自動重定向方法調用有效
| 申請號: | 201110084927.4 | 申請日: | 2011-03-28 |
| 公開(公告)號: | CN102207903A | 公開(公告)日: | 2011-10-05 |
| 發明(設計)人: | M·J·布勞德 | 申請(專利權)人: | 微軟公司 |
| 主分類號: | G06F11/36 | 分類號: | G06F11/36 |
| 代理公司: | 上海專利商標事務所有限公司 31100 | 代理人: | 蔡悅 |
| 地址: | 美國華*** | 國省代碼: | 美國;US |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 用于 單元測試 自動 定向 方法 調用 | ||
技術領域
本發明涉及單元測試系統。
背景技術
現代軟件通常包含許多通常由大型團隊的軟件開發者開發的組件。過程程序設計的時代已經結束了,在過程程序設計中,單個開發者可編寫一個完全從開始執行至完成執行單個明確定義的任務的應用程序。軟件開發者經常使用由其它開發者編寫的庫、組件、框架以及其它代碼體。在如何使用具體的外部函數或模塊上出錯或理解錯誤的機會比以往都高。
一種用于增加軟件的正確性的驗證方法稱為單元測試。在單元測試時,軟件開發者嘗試以單元可以被隔離地測試的方式將軟件的某一單元與外部影響隔離開。理論上,如果軟件應用的每個單元都是正確地,那么唯一容許出錯之處在于組件間的通信,因此單元測試能夠顯著地降低軟件錯誤率。單元測試經常將由其它開發者編寫的外部調用的庫或組件替換為模仿外部組件的功能、但將定向響應饋送到被測試的單元的占位程序或替換對象,以測試單元對特定返回值、運行條件等的反應。
當編寫在對象上調用方法的單元測試時,其中方法指針是在編譯時確定的(即非虛擬的或靜態的),當前沒有辦法對這些方法調用重新定向或“模擬”這些方法調用使得它們調用假的方法作為替代。這使得非常難以測試調用其它非虛擬方法的方法,因為不可能在不對方法調用進行重新編譯的情況下對這些方法調用重定向以使它們能夠在運行時被重定向。對于這一問題的已有的解決方案動態地生成開發者想要模擬的類的子類并將生成的子類注入到開發者想要測試的類中。這一方法利用了多態性使得被調用的方法在運行時被確定,但是該方法僅僅當基類方法被聲明為虛擬時才有效。另一種麻煩的方案是使用公共語言運行時(CLR)剖析器(profiler)應用程序編程接口(API),其附加到微軟TM.NET運行時以截取所有的方法調用。
發明內容
此處描述了一種單元測試系統,其允許使用未更改的軟件應用模塊對多種類型的方法調用進行測試。系統動態地復制被測試的方法的字節碼,克隆該字節碼并執行克隆的字節碼。在克隆期間,系統改編該代碼使得方法調用被重定向到系統API中,其中系統能夠確定是否應該調用模擬的方法作為替代。結果是開發者不需要為了將方法調用重定向到模擬方法而修改原方法。開發者能夠簡單地引用單元測試系統的測試模塊并容易地編寫對他們想要的任何方法進行重定向的測試。不僅對于重定向單元測試中的每個方法調用的能力存在很強的需求,而且同樣需要能夠在不需要改變開發環境的情況下就可以這么做。因此,單元測試系統提供了用于構建更有用的單元測試的框架,這些更有用的單元測試對生產就緒代碼引起更少的影響。
提供本概述以便以簡化形式介紹將在以下的詳細描述中進一步描述的一些概念。本發明內容并不旨在標識出所要求保護的主題的關鍵特征或必要特征,也不旨在用于限定所要求保護的主題的范圍。
附圖說明
圖1是示出在一個實施例中的單元測試系統的各組件的框圖。
圖2是描述在一實施例中單元測試系統建立對應用方法的截取的過程的流程圖。
圖3是在一實施例中描述單元測試系統的截取-處理組件處理對經截取的方法的調用的過程的流程圖。
具體實施方式
此處描述了一種單元測試系統,其允許使用未更改的軟件應用模塊對多種類型的方法的測試。系統動態地復制被測試的方法的字節碼,克隆該字節碼并執行克隆的字節碼。在克隆期間,系統改編該代碼使得方法調用被重定向到系統API中,其中系統能夠確定是否應該調用模擬的方法作為替代。結果是,開發者不需要修改原方法(或者該開發者的代碼所調用的其它匯編件中的方法)以便將方法調用重定向至模擬方法而不是他們對其進行編譯的方法。系統依賴于動態改變的字節碼,而不是依賴于多態性或CLR剖析器。與多態性方法不同,系統能夠截取對任何類型的方法的調用,而多態性只能截取虛擬方法。與CLR剖析器或其它管理層API不同,系統是獨立的并且不包含安裝或設置。
結果是開發者能夠簡單地引用單元測試系統的測試模塊并容易地編寫對他們想要的任何方法進行重定向的測試。不僅對于重定向單元測試中的每個方法調用的能力存在很強的需求,而且同樣需要能夠在不需要改變開發環境的情況下就可以這么做。在一些實施例中,系統以允許方法仍然像往常在開發環境(例如微軟TMVisual?Studio)中一樣被調試的方式來克隆這些方法。在熟悉的開發環境中使用單元測試系統的能力使開發者能夠迅速解決由單元測試識別的編碼錯誤。因此,單元測試系統提供了用于構建更有用的單元測試的框架,這些更有用的單元測試對生產就緒代碼引起更少的影響。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于微軟公司,未經微軟公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201110084927.4/2.html,轉載請聲明來源鉆瓜專利網。
- 上一篇:粘接片及使用其的太陽能電池
- 下一篇:牙齦卟啉單胞菌感染的預防、治療和診斷





