當前位置:編程學習大全網 - 源碼下載 - 接口測試源代碼

接口測試源代碼

什麽是傑克斯?Jacks測試套件檢查Java編譯器是否符合JLS(Java語言規範)。它由大量的小測試用例組成,每個測試用例集中於JLS的壹個特定部分。埃裏克·布萊克為傑克項目做出了巨大貢獻。他從面向細節的領域描述了這種測試的好處。通過生成具有指定編譯行為的小型測試用例,然後自動執行每個用例,編譯器作者或調試器可以快速找出Java源代碼到字節碼轉換中存在的問題。

開發Jacks背後的概念是簡化在多個編譯器或多個編譯器配置上運行的測試(例如,在Javac的Jikes和JDK的最後兩個發行版上的壹組測試)。如果手動執行,則必須重復設置環境變量,然後根據預期結果檢查測試結果。通過使用Jacks,您只需要切換到存儲測試的目錄,調用Jacks框架,然後指出應該使用哪個編譯器配置。

Sun未能實現其對Java開發人員的承諾,這激發了Jikes團隊建立並運行Jacks項目。Sun公司多次聲明將把Java JCK(Java Compatibility Kit)和相關的Java技術交給壹個標準的主體,但由於這壹點沒有實現,從事Java項目的開發人員無法使用J. CK公司的回歸測試日常開發。當面對不合理的許可限制造成的人為代碼短缺時,他們傾向於用新的更完善的系統來替換舊的系統。這是發生在Jacks上的故事(雖然Jacks是由developerWorks托管的,它受GPL而不是IBM公共許可證的約束)。

使用千斤頂

Jacks是用Tcl寫的,所以妳需要保證妳有Tcl(妳需要壹個版本來保證妳有tcltest擴展和Unicode支持,這兩個都是Jacks必須的)。您可以下載Windows的安裝程序和Red Hat x的RPM,並且您可以更方便地從源代碼構建它。如果您不知道從哪裏下載它,請參考本文後面的參考資料部分。如果妳用的是紅帽,很可能安裝了Tcl。

安裝Tcl後,您需要從CVS中取出Jacks,然後通過在要測試的編譯器的Jacks _setup配置文件中包含編譯器路徑名來配置Jacks。對於您想要支持的每種配置,您都需要壹個_setup文件,例如,Jacks有壹個javac_setup文件,需要對其進行編輯以便為javac進行設置。Path Eric Blake表示,最困難的部分是確定如何測試Jikes,因為我已經在環境中設置了JIKESPATH,但我想出了在jikes_setup配置文件中要更改什麽,壹切都很順利。

從CVS模塊中取出Jacks源代碼

setenv CVS root:pserver:anon CVS @:/usr/CVS/jikes CVS登錄

paswsd anoncvs

cvs收銀臺?

插孔可以用於無限數量的編譯器或編譯器配置。要刪除編譯器的配置,只需刪除它的_setup文件。

從CVS中獲取源代碼後,需要在路徑中包含頂級的Jacks目錄,以便可以運行Jacks shell腳本。為了謹慎起見,您應該在最初不帶任何參數的情況下運行shell腳本,以確保壹切配置正確。

%插孔

如果壹切正常,您將看到Jacks腳本接受的命令行選項列表。如果您收到壹個錯誤,請檢查可執行文件tclsh是否可以在路徑中找到。Windows用戶需要直接運行TCLSH,並在general標誌之前向其傳遞jacks tcl參數。還應該考慮安裝Cygwin Unix兼容層,供Unix使用。您可以使用提供的shell腳本來運行Jacks。以下說明假設您使用shell腳本。

對於測試示例,您需要使用Jikes編譯器來運行給定子目錄中的所有測試命令,如下所示

% cd測試/jls/包/包聲明/未命名的包

% jacks jikes?

開發新的回歸測試

開發壹個新的Jacks測試用例非常簡單。根據Eric Blakes的說法,基本上妳設計壹個簡單的源文件來測試這個問題,把它放入壹個特定的Jacks格式,然後運行Jacks。如果編譯器結果與預期結果不同,它會打印出壹個錯誤。下面是壹個在Jacks主頁的教程中添加新測試用例的例子。

//文件同步接口java公共同步接口同步接口{}?用Jikes編譯時產生以下錯誤。

% jikes同步接口java

發現語義錯誤堆疊同步接口java:

公共同步接口同步接口{}

& lt& gt

***錯誤:synchronized不是有效的接口修飾符

如果妳快速瀏覽壹下JLS的部分,妳會發現同步在這個上下文中不是壹個合法的修飾語。如果您嘗試在早期版本的JDK中使用Javac編譯器編譯相同的類,您將不會生成錯誤(該錯誤將在以後的版本中修復)。

% javac同步接口java

現在問題又出現了,您可以通過以下步驟向Jacks測試套件添加回歸測試用例。

理解測試用例應該放在哪個目錄中。

寫回歸測試

在Jacks框架中運行新的測試

tcltest框架中回歸測試的格式為

tcltest::測試名稱描述{ MANDS

}預期_結果?

這是在JLS的第壹個測試部分,所以名字是

測試用例位於目錄tests/JLS/接口/interface declarations/interface modifiers中(位置基於JLS部分的名稱)。

描述可以是妳想要的任何東西。

MANDS部分包含所有的Tcl命令,但是在大多數情況下,只需要Jacks中的saveas和pile方法。

saveas命令有兩個參數,文件名和要保存在文件中的數據。

另存為SynchronizedInterface java \ {公共同步接口SynchronizedInterface {}}?pile命令接受任意數量的命令行參數,並將它們傳遞給Java編譯器。它將返回PASS FAIL或WARN來指示編譯器的退出狀態。

EXPECTED_RESULT是您希望從pile命令中得到的結果。

在這個接口示例中,編譯應該不會成功,因此完整的回歸測試應該類似於。

TCL test::test {應在同步接口上生成錯誤} { save as synchronized interface Java \

{同步接口同步接口{}}

堆棧同步接口java

}失敗?試驗結果

運行測試和檢查結果是完全自動的,所以您可以休息壹下,看看會發生什麽。Jacks框架在測試目錄中遞歸下降,並運行它找到的所有測試。

如果壹切正常,將不會打印任何消息。如果測試失敗,將會打印出失敗的描述,如清單中的莫德榮所示。這個例子演示了Javac中第壹個構造函數調用第二個構造函數,第二個構造函數調用第壹個構造函數所導致的錯誤。JLS規定這是非法的(節),所以如果檢測到這種情況,Java編譯器必須發出錯誤信號。

讓我們看看Jikes是如何做同樣的測試用例的。在列表中,我們將使用Jacks中的壹些特性,讓您將模式作為Jacks腳本的第三個自變量進行傳遞,並跳過那些名稱與模式不匹配的測試用例。在這個小例子中,模式是測試用例的名稱。在這種情況下,請註意我們感興趣的測試用例是如何通過的,其他測試用例是如何被跳過的。上面的輸出顯示Javac編譯器中發現的錯誤在Jikes中不存在。

盡管人類可讀的結果非常有用,但是如果您有許多測試用例要處理,它們將很快變得非常難以管理。Jacks最近慶祝了壹個重要的裏程碑,現在它包含了不止壹個JLS獨立測試用例。這麽多的測試用例,沒有人能記住在某個時刻哪些用例通過了,哪些失敗了,但是不要怕Jacks包含了壹系列的記錄和測試結。結果分析可以隨著時間的推移跟蹤測試結果,這是壹個關鍵特性,因為它為Java編譯器開發人員提供了壹種跟蹤糾錯狀態和可能的回歸的方法。

如何編寫Jacks以及為什麽要使用Tcl

在實現測試套件(如Jacks)時,腳本語言是壹種自然的選擇,使用Tcl的原因如下。

Tcl是開源的,所以未來壹段時間還會繼續存在。

易於安裝,無需編譯腳本

易讀的腳本語言比C/C++更容易掌握

易於使用的字符串處理和正則表達式功能

高度可移植,可以在比Java更多的平臺上運行。

在過去的十年中,它已經成功地應用於數以千計的組織中。

諷刺的是以前是Sun項目:)

莫德炯說,Jacks最顯著的壹個特點就是自生成文檔。在Jacks主頁上,您可以找到測試用例索引頁面的鏈接,它列出了所有可用的測試用例。它可以通過幾種有用的方式進行索引和交叉引用,並且可以方便地通過名稱找到測試用例,還可以通過現有的測試來了解壹個JLS章節的內容有多完善。Tcl的高度動態語言特性使得自記錄測試用例的實現更加容易。

到目前為止,Jacks支持以下Java編譯器。

JDK(和也有,但已過時)

Jikes IBM的開源Java編譯器

Kaffe使用了Kopi編譯器。

從GCJ到gcc的Java前端

到處改進Java編譯器

Jacks最初只專註於為Jikes項目提供編譯器測試。最初的目標是取代為Jikes創建的自制測試系統,但由於構建和使用難度太大,這壹初衷被放棄了。人們很快發現,如果測試套件變得更加常規,它可以用於其他Java編譯器項目,這將導致提交的測試用例數量增加。至少讓其他Java專家來評估測試用例的正確性。

Jikes項目自然大量使用了Jacks,但是GCJ和Kopi編譯器項目呢?Tom Tromey Red Hat的Java永久領導者已經意識到了Jacks開發在GCJ項目中的作用。千斤頂對GCJ項目具有實際意義。每當我對前端編譯器進行更改時,我都會運行Jacks,並定期使用Jacks在GCJ中查找錯誤。我覺得加測試是小事壹樁。該框架非常易於使用和周到。

Lishi Xinzhi/Article/program/Java/Javascript/201311/25464

  • 上一篇:金龍祭瑞的意思
  • 下一篇:C語言練習
  • copyright 2024編程學習大全網