2009-10-14 47 views
2

我應該爲另一位同事編寫的代碼編寫項目的單元測試。他創建了一個通用列表類。現在我正在思考,爲班級創建單元測試以及如何避免重複代碼的最佳方式。 List類可以通過String,Integer和其他一些類型實例化。我怎樣才能避免爲每個類型編寫一個測試類,而是爲每個數據類型使用一個測試類?爲泛型類寫單元測試...最佳方法?

感謝帕特里克

+1

好吧我會咬...你的同事爲什麼重新創建列表輪?我只是好奇。 – cletus 2009-10-14 14:20:38

+1

更重要的是,如果需要進行單元測試,那麼爲什麼同事沒有把它們編碼? – 2009-10-14 14:23:03

回答

4

請問你測試對待它包含的元素基於其類型的任何特殊的方式上課嗎?如果它將String和Integer的實例視爲相同,那麼只需使用String對其進行一次測試即可,並假定Integer可以正常工作。

單元測試在很大程度上取決於預期的行爲。

0

JUnit4有一個參數化的跑步者,它可以讓你爲所有不同的類型編寫一個測試。這假設在不同類型之間沒有實質性的行爲差異,所以測試可以以相同的方式運用這個類。

這就是說,我不得不重複評論這個問題的基本情況是非常奇怪的。 JDK有很多列表實現,爲此編寫一個類是很奇怪的。

+0

列表有一些功能可以撤消更改。他需要這個項目。我爲什麼要爲它編寫測試?我的同事們從來沒有與它合作過(他們鄙視這種巫術;-)),而我(公司裏的新人)已經研究了一些話題。所以我的老闆告訴我要通過編寫單元測試來支持我的同事在他的項目中。它也應該向他們展示使用像Junit這樣的框架的好處。 – Patrick 2009-10-14 14:44:55

2

我同意Max A.你需要測試預期的行爲。如果泛型類對於不同的參數化類型表現不同,那麼您需要測試它。否則,使用一種類型的測試應該足夠。另外,如果要聲明泛型類可以爲任何類型實例化,則可能需要編寫一個測試,以實例化Object的類。這是一個有點奇怪的測試,因爲如果它將它編譯爲「通過」,但如果將測試保持爲系統預期行爲的迴歸(並且您應該),那麼此測試將防止有人將泛型類更改爲參數化與<T extends YYY>

+0

感謝您的有用提示! :-) – Patrick 2009-10-15 08:39:10

相關問題