2012-10-19 11 views
1

我想知道的原因是,在遍佈商店搜索LinkedHashMap/LinkedHashSet的實現後,您可以指定自己的equals/hashcode函數,但找不到它。任何人都知道Oracle/Sun是否會發布他們用於java庫類的(junit)測試類?

我發現一對夫婦實現此只是HashMap的圖書館,以及一個被看好實現它的LinkedHashMap在未來的某個時刻,但仍然沒有。

所以我決定只改變HM源和自己做,再經過實施LHM。

這將會是冷靜,如果我能偷已有的測試類的代碼,並添加/修改它們。因此,這個問題。

回答

4

如果您正在尋找Map測試,你可以比Guava's MapTestSuiteBuilder辦差。您還會發現SetTestSuiteBuilder和其他方便的工具,用於測試集合adjacent to it in the package,以及方便的EqualsTesternearby。 (見路易的link有關如何使用測試的例子。)

您也可以考慮制定標準LinkedHashMap恰好含有番石榴的Equivalence.Wrapper類型的對象。基本上,你創建一個包含你自己設計的equalshashCode方法的Equivalence實現,然後用它來創建輕量級的包裝爲每個對象你願意在你的設置/圖。在包裝的equalshashCode將讓您Set/Map行爲您想要的方式,然後你就可以解開以後使用的實例。

(當然,你也可以直接跳過番石榴和編寫實現equalshashCode過單場包裝對象,但番石榴有一個已經編寫了你。)

+2

[用法示例代碼(HTTP: //code.google.com/p/guava-libraries/source/browse/guava-testlib/src/com/google/common/collect/testing/TestsForMapsInJavaUtil.java#132)。 –

+0

謝謝,那看起來正是我需要的。我必須仔細閱讀一下它,才能弄清楚如何使用它,但總的來說,番石榴的東西總是有很好的記錄和明智的。 實現自定義LHM/HM/LHS/HS實際上非常容易,我完成了。我更喜歡使用包裝對象的地圖,因爲它使代碼看起來更清晰,我寧願這樣做。 – fragorl

+0

@fragorl你可能已經知道了,但是我忘了把SetTestSuiteBuilder(和其他的)與MapTestSuiteBuilder相鄰。無論如何,我正在修改答案,以便更好地符合您的問題。 –

相關問題