2011-06-27 34 views
3

我有這個...我用來查看創建的類是否與給定結構匹配的類集。我正在做的是讀取一個屬性文件,然後將它與一個類進行比較。用於測試Java類結構的庫或框架

即。

className: demo.HelloWorld 
classFile: demo/HelloWorld.class 
methods: public static main(java/lang.String[]) : void 
attributes: name : java.lang.String 

等等。

在我繼續研究這樣的事情之前,我想知道是否有人知道庫或框架也這樣做。

+0

我必須認真地想知道爲什麼你會這樣做。違反DRY。我會理解它是否基於規則(就像所有實現這個接口的類都應該被命名一樣)。 –

+0

@亞當:當然測試。我想測試一個類文件(一個.class文件)是否包含它說的類,方法,屬性等。是的,測試基本上是重複你自己:) – OscarRyz

+0

我必須錯過一些東西。所以你設想有人將這些屬性文件與Java類一起寫入?爲什麼不寫一些常規的單元測試。爲了進行測試,我總是盡力去爭取最大的回報,而你所做的合同測試的水平似乎並不值得。特別是因爲如果重命名方法/屬性,真正的單元測試會重構並顯示編譯時錯誤。如果你只是想命名一致性看到我的答案。 –

回答

0

我有一個很好的庫建立了很多反射工具,但我不能釋放它,因爲許可問題(傳情!)check this out tho或這here。一旦你建立了一些基本的反射工具,事情就會很快開始。

1

爲了做到這一點,您需要有一個Java解析器能夠解析「結構」(Java片段),並且可能能夠查找涉及的類型。 (你可能會用一些腳本語言來做這件事,但它會非常脆弱並且容易產生錯誤的否定結果,這會在你希望這個工具可以節省你的時候吃掉)。

我們的DMS Software Reengineering Toolkit及其Java Front End是一個具有這些功能的框架。 DMS旨在使您能夠構建用於分析或轉換源代碼的任意自定義工具。 DMS提供瞭解析器(其中一個由所選前端定義),AST構建器,用於諸如C,C++,Java和COBOL等語言的符號表構造,用於在程序上和使用曲面語法模式來檢查樹的工具,它們允許您直接表示代碼片段(由前端解析確定)用於代碼生成或模式匹配目的。

對於要執行的任務,您需要DMS解析感興趣的軟件,並執行名稱和類型解析(構建符號表)。然後你會想使用DMS的模式解析器來讀取你的「規範文件」作爲一組方法簽名等,並使用名稱解析器來定位/查找標識符(例如,「demo.Helloworld)」,找到相應的類,並且再搭配針對方法簽名的解析模式,不匹配將報告不一致,這是我認爲你正在尋找

+0

我想我可以建立一個小的DSL(實際上這是我的.properties文件)我不確定使用像DMS這樣的工具是否會過度殺傷。我會找出 – OscarRyz

+0

@OscarRyz:僅僅只是一個DSL來滿足你的規範是不夠的。如果沒有真正解析Java和做名稱/類型解析的能力,我認爲你不能得到你想要的東西。 –