2013-04-25 45 views
1

我有一個抽象的Record類,它代表數據庫中的記錄。每個記錄必須至少包含以下列:id,已創建,已更新。單元測試擴展類基本功能

然後我擴展Record類以表示特定表中的行。例如,我有以下類擴展記錄:客戶,工作,位置和公司。在每一個我定義一個靜態「table_name」變量和靜態變量代表他們的列。

我希望能夠測試這些類的基本功能,記錄的所有擴展應該有。我可以爲每個測試類寫一個測試類來測試這些東西,但我基本上是複製和粘貼每個Record類的擴展的測試,看起來不正確。

我想過編寫一個測試類,並在數組中使用這些對象的數據提供者,但是如果出現失敗的測試,我不知道哪個對象會導致失敗。

需要有某種TestAllExtensionsOfRecordClass測試類的方法,然後通過它運行我的對象並能夠分辨哪個對象導致失敗。

對此提出建議?

+0

如果您要測試的是抽象類功能 - 只需創建一個存根類並對其進行測試即可。對於特定的類只測試其特定的實現,假設基礎實現已經過測試。 – zerkms 2013-04-25 22:01:26

+0

不理解您將列變量設置爲靜態的選擇。這將使單元測試變得困難。如果每個Record子類都是獨立的,那麼您將分別測試每個獨立的子類,但是您至少會有一組測試基類功能的測試。您不會在每個子類中重複測試「id」或「created」。 – 2013-04-26 18:15:29

回答

1

許多單元測試框架支持測試類繼承 - 您可以創建一個抽象測試超類,所有派生測試類將繼承並執行其中的所有測試。這使您可以在該超類中定義abstract test cases aka contract tests。這些測試是針對您的「基本功能」而言的,無論具體實施如何,都必須保持不變。所以在你的情況下,你將得到一個包含所有基本測試用例和派生的CustomerTest,JobTest等的抽象RecordTest,它們將根據它們自己的實現來執行這些測試。