2008-09-20 87 views
7

有沒有什麼可以讓你自動測試接口的行爲?作爲一個例子,假設我有一堆針對Comparable接口的測試,它應該適用於實現Comparable的任何東西。我希望能夠在我的任何實現Comparable的類的測試裝置中自動包含「ComparableTests」。如果這可以與通用接口一起使用,則獎勵點數。測試在Java中實現接口的所有類

我知道.NET框架mbUnit有類似的東西,當您使用類似TestNG的生成器函數時,您可以爲Comparable設置一個測試夾具,並讓生成器爲您的每個類創建一個實現Comparable 。但我寧願讓它自動化,並且位於我的每個類的測試夾具上(因爲我已經有了它們來測試該類的其他部分)。

澄清:我肯定可以建立這樣的事情。我問是否有任何已經啓用了這個功能的東西。

回答

0

在.NET中這將是非常簡單的設置,看起來通過組裝和標識每個類的繼承/實現層次的方法。如果你研究Java reflection API,我相信你也可以用Java來做。

然後,您可以創建的ITargetInterface秒的陣列和調用每個一項所述的測試方法。

0

一種方法是通過jar文件搜索所有.class文件(或者搜索classes目錄),使用Class.forName()方法加載類文件並檢查MyInterface.class.isAssignableFrom(我的課)。

這不會很容易打交道公共靜態內部類(你可以解析類文件名),但絕不會跟私有內部類或匿名內部類的工作。

+0

這可能證明是非常困難的,因爲複雜的工廠可能會被用來實例化接口的具體實現。 – p3t0r 2008-09-21 06:29:34

1

根據您的最後一段,你正在做的是注入一些「額外的方法」進行單元測試,因爲你已經在測試一個特定的類。我不知道一個測試工具,它允許你根據一個類的層次結構來附加測試。

然而,用自己的用TestNG建立類似的建議,我認爲你可能會很接近。你可以很好地合併一些基本代碼,將你的類添加到「默認測試類」列表中,然後在測試它們實現特定接口時進行測試。

儘管如此,關於一般情況,我認爲你不走運,因爲Java類型系統是單向的,所以只能(很容易地)找出類實現的接口,而不是相反。此外,問題在於「在哪裏停止尋找」:如果您有一個檢查所有comparable實施者的測試,那麼是否希望它也檢查String的實施者的有效性,因爲這是在您的Java環境中?